忍者ブログ

◆当blogは、Linuxサーバ構築する際の実際の設定手順を個人的メモとして記載しております。LinuC試験の役に立つ情報があるかも…?

LinuC(Linux技術者認定資格)&リナックスサーバ構築設定事例

   

【Shell Script】find_Copy

#!/bin/bash
# ============================
# ルート権限チェック
# ============================
if [ "$EUID" -ne 0 ]; then
  echo "エラー: root権限が必要です(実行キャンセル)"
  echo "sudo ./$0 で実行してください"
  exit 1
fi
# ============================
# カレントディレクトリ移動
# ============================
cd /tmp/TEST ; pwd
# ============================
# ユーザー入力を変数にセット
# ============================
echo "*** コピー対象の指定 ***"
read -p "1. 対象のパターン文字列 (例: xxx*): " DIR_PATTERN
read -p "2. 対象の年 (例: 2026): " YEAR
read -p "3. 対象の月 (例: 09): " MONTH
# ============================
# 空入力チェック
# ============================
if [ -z "$DIR_PATTERN" ] || [ -z "$YEAR" ] || [ -z "$MONTH" ]; then
  echo "エラー: すべての項目を入力してください(処理中断)"
  exit 1
fi
# ============================
# 月の入力形式の補正
# (例: "9" の場合 "09" に補正)
# ============================
if [[ ${#MONTH} -eq 1 ]]; then
  MONTH="0${MONTH}"
fi
# ============================
# 月末日付の自動判定
# ============================
case "$MONTH" in
  "01"|"03"|"05"|"07"|"08"|"10"|"12")
    DAY_RANGE="3[0-1]"
    ;;
  "04"|"06"|"09"|"11")
    DAY_RANGE="30"
    ;;
  "02")
    # うるう年判定
    if (( (YEAR % 4 == 0 && YEAR % 100 != 0) || YEAR % 400 == 0 )); then
        DAY_RANGE="2[0-9]"
    else
        DAY_RANGE="2[0-8]"
    fi
    ;;
  *)
    echo "エラー: 月の入力不正(01〜12以外は不正)"
    exit 1
    ;;
esac
echo ""
echo "*** コピー処理(開始) ***"
echo "【検索元】カレントディレクトリ ( $(pwd) )"
echo "【ディレクトリ条件】./${DIR_PATTERN}"
echo "【対象日時】${YEAR}年${MONTH}月 (日最大範囲:${DAY_RANGE})"
echo "***************************"
# ============================
# カレントディレクトリ配下でループ
# (パターン文字列に一致する場合)
# ============================
find . -maxdepth 1 -type d -name "${DIR_PATTERN}" | while read -r src_dir; do
  # ディレクトリ名のみ抽出
  dir_name=$(basename "$src_dir")
  dest_dir="/tmp/$dir_name"
  echo "(コピー中): $src_dir -> $dest_dir"
  # ============================
  # コピー先のディレクトリ作成(既存はスキップ)
  mkdir -p "$dest_dir"
  # ============================
  # 対象ファイルのコピー実行(1万件以上でも可)
  find "$src_dir" -maxdepth 1 -type f -regextype posix-egrep \
    -regex ".*/[^/]*_${YEAR}-?(${MONTH}-?(0[1-9]|[1-2][0-9]|${DAY_RANGE}))_[^/]*" \
    -exec cp -a -t "$dest_dir" {} +
done
echo "*** コピー処理(完了) ***"
PR

更新日付

09 2026/10 11
S M T W T F S
1 2
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

RECOMMEND

プロフィール

HN:
Account
HP:
性別:
非公開
職業:
--- NODATA ---
趣味:
--- NODATA ---
自己紹介:
◆当blogは、Linuxサーバ構築する際の実際の設定手順を個人的メモとして記載しております。LinuC試験の役に立つ情報があるかも…?

リンク

 | HOME |  【Linux】日付指定の圧縮>>
Copyright ©  -- LinuC(Linux技術者認定資格)&リナックスサーバ構築設定事例 --  All Rights Reserved
Design by CriCri / Photo by Melonenmann / powered by NINJA TOOLS / 忍者ブログ / [PR]