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


21

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

回答:


26

これは十分に簡単です(ただし、作成時間は特別なツールを備えた特定のファイルシステムでのみ利用可能であるため、これは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 {} +

#適切なファイルがあることが確認できたら、再度削除します。

Update2

ステファン・シャゼラスのコメントから引用するには:

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


ありがとう!/a/b/c/すべてのオプションで指定する必要がないように、親ディレクトリを指定してから子ディレクトリを指定する方法はありますか?
KingKongFrog 14年

もちろん、POSIXシェルでは実行できます/a/b/c/[12]が、これはサブディレクトリに1文字の名前がある場合にのみ本当に適切です。でbashできること/a/b/c/{1,2}。もちろん、スクリプトの強打線が必要になります。#!/bin/bashまたは、crontabを使用している場合は、使用するように構成されていることを確認する必要がありますbash(そうでない場合は変更しないことをお勧めします)。
グレアム14年

2
ブレース拡張はcshの機能であり、ksh、bash、zsh、およびfishでもサポートされているため、幅広いシェルを選択できます。kshbashそしてzshまた、そのグロブで交代演算子を持っています。注-exec rm {} +競合状態の脆弱性がある-delete(利用可能な場合)を持っていません。したがって、他のユーザーが書き込み可能なディレクトリでは使用しないでください。一部の発見には、-execdirこれらの脆弱性を緩和するものもあります。
ステファンシャゼル14年

rm -fエラーを静かに処理しないため、-exec
Acumenus


9

あなたが使用したほうがはるかに良いでしょう 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.

2
tmpwatchに分岐しましtmpreaperた(少なくともDebian上では)。
ヤープ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.