findコマンドのdeleteオプション

やりたいことは
条件に合うファイルを検索し、そのファイルを削除したい。
下位の階層も含めて検索対象としたい。

findコマンドとxargsの組み合わせで行えばいいかと思ったのですが、findコマンドに-deleteオプションがあり、それを使うのが簡単でした。

# -mtime 2 ... 2日前に作成したファイル
find ./ -name '*.tmp' -type f -mtime 2 -delete

デフォルトで下位の階層まで検索対象にしますが、
下位の何階層までを検索対象にするか指定したい場合は、「maxdepth 」で指定できます。

log
  + 202201
    + 20220101.log
    + 20220102.log
    + 20220103.log
       :
  + 202202
      :

2を指定すると logフォルダ直下のフォルダも対象します。
1は指定したフォルダのみが対象になります。

find ./log -maxdepth 2 -name '*.tmp' -type f -mtime 2 -delete

これに気付く前は以下のようにしないとけないと思ってました。

LOG_HOME=./log
for subfolder in AAA BBB
do 
    echo ${subfolder}
    # -mtime 2 ... 2日前に作成したファイル
    find ${LOG_HOME}${subfolder}/ -name '*.tmp' -type f -mtime 2 -delete
done

とか

LOG_HOME=./log
subfolder=("AAA" "BBB" "CCC")
for subfolder in ${subfolder[@]}
do 
    echo ${subfolder}
    # -mtime 2 ... 2日前に作成したファイル
    find ${LOG_HOME}/${subfolder}/ -name '*.tmp' -type f -mtime 2 -delete > log.txt 2>&1
done

この記事が気に入ったらサポートをしてみませんか?