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

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

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

答え1

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

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

削除するファイルが確実に見つかるようになったら、 の#前のを削除します。-delete

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

アップデート

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

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

#正しいファイルがあることを確認したら、再度削除します。

アップデート2

引用:ステファン・シャゼラスのコメント下に:

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

答え2

使用する方がはるかに良いでしょう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.

関連情報