web-dev-qa-db-ja.com

3日以上経過したファイルを削除するCronジョブ

3つの異なるディレクトリにあるcronジョブを使用して、3日以上経過したファイルを削除する必要があります。 (これらの3つのディレクトリは、親ディレクトリの子です/a/b/c/1/a/b/c/2/a/b/c/3)これはcrontabの1行で実行できますか?

21
KingKongFrog

これは十分に簡単です(ただし、作成時間は特別なツールを備えた特定のファイルシステムでのみ使用できるため、変更日から3日以上経過していることに注意してください)。

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

削除するファイルが見つかったことを確認したら、#の前に-deleteを削除します。

Cronで実行するには、おそらく実行可能スクリプトを作成し(ファイルの先頭行にShebang-#!bin/shを追加し、chmod a+xで実行可能にする)、適切なcronに配置します。 /etc/cron.dailyまたは/etc/cron.weeklyなどのディレクトリ。もちろん、より具体的なスケジュールは必要なく、これらのディレクトリがディストリビューションに存在することが条件です。

更新

以下に示すように、find-deleteオプションは移植性があまり高くありません。 POSIX互換のアプローチは次のようになります。

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

適切なファイルがあることを確認したら、もう一度#を削除します。

Update2

以下の StéphaneChazelasコメント から引用するには:

-exec rm {} +には-delete(利用可能な場合)にはない競合状態の脆弱性があることに注意してください。したがって、他のユーザーが書き込み可能なディレクトリでは使用しないでください。一部の検索には、これらの脆弱性を軽減する-execdirもあります。

26
Graeme

tmpwatchを使用した方がずっと良いでしょう

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.
9
Barry Chapman