X日以上経過したファイルを削除します+


143

フォルダー内の5日より古いファイルを削除するコマンドを見つけました

find /path/to/files* -mtime +5 -exec rm {} \;

しかし、そのフォルダ内のサブディレクトリに対してこれをどのように行うのですか?


サブディレクトリ内のファイルを意味しますか?またはサブディレクトリ自体?
ラーウル

3
find /path/to -type d -empty -delete
コスタス

2
5日以上経過しているサブディレクトリ内のファイルを削除する
-Teddy291

3
ファイルにスペースが含まれていると、おそらく楽しいでしょう。たとえば、「テスト1」と呼ばれるファイルとrmがフィードされrm test oneます。(「test」というファイルと「one」というファイルを削除しますが、「test one」というファイルは削除しません)。ヒント:-deleteまたは-print0
Hennes

6
補足として、答えの最初の行で述べたように、特殊文字に関する問題を避けるために提供された引数を常に引用してくださいfind。例:find /path/to/files/ -exec somecommand '{}' \;
ウォルフ

回答:


240

rmにパイプするときは、特殊なファイル名(スペース、引用符)に注意してください。

安全な代替手段があります--deleteオプション:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

それだけです。個別のrm呼び出しはなく、ファイル名について心配する必要はありません。

置き換え-delete-depth -printから、このコマンドを実行する前にテストします(を-delete意味します-depth)。


23
また、使用し-type fたファイルのみを削除する(およびサブディレクトリを保つ)
オレグ

3
または、5日より新しいすべてのファイルに対して同じ操作を行いたい場合:find / path / to / directory / -mindepth 1 -mtime -5 -delete
zmonteca

パスにスペースが含まれている場合、どうすればよいですか?find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
パトリックグレゴリオ

3
@ uom-pgregorioパスを引用符で囲むことをお勧めします。
atripes

4
すべてのfind引数は、前のフィルターの結果を入力として使用するフィルターであることに注意してください。そのため、必ず最後の引数として-deleteを追加してください。IE:find . -delete -mtime +5現在のパスのすべてを削除します。
ヨハン

15

このコマンドは、ファイルが多すぎると機能しないことに注意してください。次のようなエラーが発生します。

bash: /usr/bin/find: Argument list too long

execシステムコールのコマンドラインの長さの制限を超えました。rmをそのように実行する代わりに、xargsを使用する方がはるかに効率的です。動作する例を次に示します。

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

これにより、/ root / Maildir /の下で14日以上前に変更されたすべてのファイル(タイプf)がそこから再帰的に削除されます(mindepth 1)。その他のオプションについては、検索マニュアルを参照してください


7
AskUbuntuに関する@AfshinHamediの回答(askubuntu.com/questions/589210/removing-files-older-than-7-dayに従って、改行と特殊文字を含むファイルに注意してください。代わりに使用find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
-Cbhihe

2
または、検索結果に「+」を追加する
Dani_l

8

それは同じだ。ファイルのプレフィックスではなく、親ディレクトリを指定するだけです。あなたの例では:

find /path/to -type f -mtime +5 -exec rm {} \;

これにより、5日以上経過したすべてのファイル/path/toとそのサブディレクトリが削除されます。

空のサブディレクトリを削除するには、上記の@Costasコメントを参照してください。


4
各ファイルに対してrmコマンドを実行することに注意してください。5日以上前のファイルが1000個ある場合、rmは1000回開始されます。このため、コスタのコメントのように-deleteオプションを検討するか、または-exec rm {} \ +
Hennes

@Hennes:-1)+その場合、脱出する必要があるかどうかわからない。-2)-exec rm '{}' +名前に特殊文字(スペース、改行など)を含むファイルの悪を防ぐために書く方が良い。
-Cbhihe

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.