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

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

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ファイルの最初の行にshebangを追加し、それを実行可能にするために使用します)などの適切なディレクトリ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.

関連情報