特定の日付より前に作成されたすべてのファイルを削除する

特定の日付より前に作成されたすべてのファイルを削除する

私は多くのファイル(例えば、毎年の毎日のログ)を含むディレクトリを持っています。 2011年22月22日より前に作成されたすべてのファイルを削除したいと思います。どうすればいいですか?findexecを使用する必要がありますか-rm? kshを使用しています。

答え1

を使用することは、findまだファイルを削除するための好ましい方法です。バラよりhttp://mywiki.wooledge.org/UsingFindもっと学ぶ。

1つの方法は、タイムスタンプを含むファイルを作成することです。例えば

touch -t 201311220000 /tmp/timestamp

find次に、タイムスタンプに一致するGNUファイルを削除します(現在のディレクトリにあると仮定)。例:

find . -type f ! -newer /tmp/timestamp -delete  

または非GNUルックアップ

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

答え2

GNUまたは一部のBSDの場合find

find . ! -newermt 2013-11-22 ! -type d -delete

ファイルの最後の変更時刻を確認してください。一部のBSDでは、-newerBtinを代わりに使用して-newermtファイルのinodeを確認できます。生まれる時間があれば。

正確に2013-11-22 00:00:00.0000000000で生成されたファイルも削除されます。時計はそれほど正確ではありませんが、これはランダムにタイムスタンプ付きのファイル(using touch -d 2013-11-22T00:00:00 some-file(またはtouch -d 2013-11-22一部のtouch実装)など)に問題を引き起こす可能性があります。いつでも! -newermt '2013-11-21 23:59:59.999999999999'(GNU)または(BSD)に変更できますが、! -newermt '2013-11-21 23:59:59'これにより、2013年11月21日の最後の秒で最後に変更されたファイルが見つかりません。

答え3

find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

例:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

この場合、「ORA_XEO」で始まり15日を過ぎたすべてのファイルが削除されます。

関連情報