
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.