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/
すべてのオプションで指定する必要がないように、親ディレクトリを指定してから子ディレクトリを指定する方法はありますか?