私は多くのファイル(例えば、毎年の毎日のログ)を含むディレクトリを持っています。 2011年22月22日より前に作成されたすべてのファイルを削除したいと思います。どうすればいいですか?find
execを使用する必要がありますか-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では、-newerBt
inを代わりに使用して-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日を過ぎたすべてのファイルが削除されます。