フォルダから5日以上経過したファイルを削除するコマンドが見つかりました。
find /path/to/files* -mtime +5 -exec rm {} \;
しかし、このフォルダ内のサブディレクトリに対してこれをどのように実行しますか?
答え1
rm にパイプするときは、特殊ファイル名 (スペース、引用符) に注意してください。
安全な選択肢があります --削除オプション:
find /path/to/directory/ -mindepth 1 -mtime +5 -delete
それはすべてです。個別の rm 呼び出しは必要なく、ファイル名を気にする必要はありません。
-delete
コマンドを実行する前にテストするには(暗黙的に)に置き換えます。-depth -print
-delete
-depth
説明する:
-mindepth 1
:これがない場合.
(ディレクトリ自体)も一致して削除できます。-mtime +5
:最後に変更されたデータが5×24時間前のファイルを処理します。
答え2
ファイルが多すぎると、このコマンドは機能しません。次のエラーが発生します。
bash: /usr/bin/find: Argument list too long
これは、execシステムコールのコマンドライン長制限を超えたことを意味します。このように、rmを実行するよりも使用する方が効率的です。パラメータ。以下は実際の例です。
find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm
これにより、変更されてから14日を超えた/root/Maildir/の下のすべてのファイル(fタイプ)が削除され、それより深い場所(最小深さ1)が繰り返し削除されます。その他のオプションについては、検索マニュアルを参照してください。。
答え3
同じです。ファイルプレフィックスの代わりに親ディレクトリを指定するだけです。あなたの例では次のようになります。
find /path/to -type f -mtime +5 -exec rm {} \;
/path/to
これにより、そのファイルと5日を過ぎたサブディレクトリの両方が削除されます。
空のサブディレクトリを削除するには、上記の@Costasの説明を参照してください。
答え4
find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf