3つの異なるディレクトリにあるcronジョブで3日以上前のファイルを削除する必要があります。(これら3つのディレクトリは、親ディレクトリの子である/a/b/c/1&/a/b/c/2&/a/b/c/3)をこれはcrontabの中で1行で行うことができますか?
3つの異なるディレクトリにあるcronジョブで3日以上前のファイルを削除する必要があります。(これら3つのディレクトリは、親ディレクトリの子である/a/b/c/1&/a/b/c/2&/a/b/c/3)をこれはcrontabの中で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 {} +#適切なファイルがあることが確認できたら、再度削除します。
ステファン・シャゼラスのコメントから引用するには:
注
-exec rm {} +競合状態の脆弱性がある-delete(利用可能な場合)を持っていません。したがって、他のユーザーが書き込み可能なディレクトリでは使用しないでください。一部の発見には、-execdirこれらの脆弱性を緩和するものもあります。
/a/b/c/[12]が、これはサブディレクトリに1文字の名前がある場合にのみ本当に適切です。でbashできること/a/b/c/{1,2}。もちろん、スクリプトの強打線が必要になります。#!/bin/bashまたは、crontabを使用している場合は、使用するように構成されていることを確認する必要がありますbash(そうでない場合は変更しないことをお勧めします)。
                    ksh、bashそしてzshまた、そのグロブで交代演算子を持っています。注-exec rm {} +競合状態の脆弱性がある-delete(利用可能な場合)を持っていません。したがって、他のユーザーが書き込み可能なディレクトリでは使用しないでください。一部の発見には、-execdirこれらの脆弱性を緩和するものもあります。
                    rm -fエラーを静かに処理しないため、-exec?
                    あなたが使用したほうがはるかに良いでしょう 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.tmpwatchに分岐しましtmpreaperた(少なくともDebian上では)。
                    
/a/b/c/すべてのオプションで指定する必要がないように、親ディレクトリを指定してから子ディレクトリを指定する方法はありますか?