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


26

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


1
通常の注意点は、Unixファイルシステムには通常、ファイルが作成されたときの記録が含まれていないことです。inodeとコンテンツが最後に変更された時間のみが利用可能です。
トビーSpeight

回答:


35

findファイルを削除するには、引き続き使用することをお勧めします。詳細については、http://mywiki.wooledge.org/UsingFindを参照してください

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

touch -t 201311220000 /tmp/timestamp

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

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

または非GNU find

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

2
これはどうですか ?動作しますか?find -type f -mtime +5 -exec rm -f {} \;
user1058398

1
@ user1058398これで、5日以上前のファイルが削除されます。
バレンティンバジラミ

また、ファイルとともにフォルダーも削除しますか?@ val0x00ff
alper

1
@Avatarいいえtype -f。アクションはファイルのみに制限されるためです。
バレンティンバジラミ

22

GNUまたはいくつかのBSD findの場合:

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

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


1
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日以上のすべてのファイルが削除されます。


を使ってよく見るとrm -rf、最初のコマンドはそれらの15日より古いディレクトリに含まれるすべてのものを削除します。(また、なぜ括弧が周りにあるの-nameか?)
ilkkachu

そのとおり、「(」「)」を入れる必要はありません。
カラファテ

ただし、条件を追加する場合は便利です。たとえば、「。jar」または「.cp」で終わるすべてのファイルを削除し、「ex」で始まる場合。 example.jar-削除されますexample.cp-削除されます example.tar-削除され
ません-calafate

このケースでは、我々は使用することができます:find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
カラファテ

それから、いくつかのファイルを削除します<日数>はなく、より古いすべてのファイル<日数>あなたが真夜中に正確にそれを実行し、それは秒以内に終了しない限り。GNU では、値を真夜中に強制findするために-daystart修飾子を使用する必要があります-mtime
ロアイマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.