web-dev-qa-db-ja.com

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

多数のファイル(1年の毎日のログなど)を含むディレクトリがあります。 22/11と言う前に作成されたすべてのファイルを削除したいと思います。どうすればそれを達成できますか? findを使用してからexec -rmを使用する必要がありますか?私はkshを使用しています。

29
user1058398

findの使用は、ファイルを削除するための好ましい方法です。詳細は http://mywiki.wooledge.org/UsingFind を参照してください。

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

touch -t 201311220000 /tmp/timestamp

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

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

または非GNU見つける

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

GNUまたはいくつかのBSD finds:

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

ファイルの最終変更時刻をチェックすることに注意してください。一部のBSDでは、-newerBtの代わりに-newermtを使用して、代わりにファイルのiノードbirth時間を確認できます。

27
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日を超えるすべてのファイルが削除されます。

1
calafate