「引数リストが長すぎる」場合、3日以上経過したすべてのファイルを削除するにはどうすればよいですか?


89

82000個のファイルとディレクトリが含まれるログファイルディレクトリがあります(約半分)。

3日以上経過したすべてのファイルとディレクトリを削除する必要があります。

37000個のファイルが含まれているディレクトリでは、次のようにしてこれを行うことができました。

find * -mtime +3 -exec rm {} \;

しかし、82000ファイル/ディレクトリの場合、エラーが発生します。

/ usr / bin / find:引数リストが長すぎます

3日以上経過したすべてのファイル/ディレクトリを削除できるようにするには、どうすればこのエラーを回避できますか?


1
試しましたfind -mtime +3 -exec rm {} +か?
Gilles Quenot、2013

1
ランニングfind * -mtime +3 |xargs rmはその問題を解決すると信じています。
Mats Petersson、2013

9
唯一の問題だと思いますfind *find .優れている。シェルglobingは*、ファイルとディレクトリの巨大なリストに展開します。
アートレスノイズ2013

@artlessnoiseが注目されています。
sjas

回答:


120

現在のディレクトリ内のすべてのファイルディレクトリを削除するには:

find . -mtime +3 | xargs rm -Rf

または、OPの元のコマンドと一致します。

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1問題は「find *」の星であり、「find」を使用して解決しました。代わりに。Xargsはここで誤解を招くものです。
Aleksandr Levchuk 2013年

7
@AleksandrLevchukこれはOPの問題を解決するため、反対票を投じる価値はありません
hd1

11
質問:「検索* -mtime +3 -exec rm {} \;」引数リストが長すぎます。回答:「find。-mtime +3 -exec rm {} \;」を使用してください
Aleksandr Levchuk 2013年

2
次の--ように、rmの後に追加することもできますfind . -mtime +3 -exec rm -- {} \;
domen

8
誰もが何の--ためにあるのか言っていません。
Acumenus 2015

59

以下も使用できます:

find . -mindepth 1 -mtime +3 -delete

ターゲットディレクトリを削除しない


4
ベストアンサー。rmを呼び出すよりもはるかにクリーンです(おそらく安全です)。サブディレクトリでも機能します。
basic6

16

元の質問に対する別の解決策、特に。フォルダ内の古いファイルの一部のみを削除する場合に便利です。次のようになります。

find . -name "*.sess" -mtime +100 

など。引用符はシェルワイルドカードをブロックするため、何百万ものファイルを「検索」できます。

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