多くの(200 000)ファイルを削除する方法は?


17

フォルダーから20万個のファイル(すべて)を削除する必要がありますが、フォルダー自体は削除したくありません。

rmを使用すると、「引数リストが長すぎます」エラーが表示されます。私はxargsで何かをしようとしましたが、私はシェルガイではないので、うまくいきません:

find -name * | xargs rm -f

5
フォルダーを削除して、削除後に再作成しないのはなぜですか?
-garconcn

回答:


35
$ find /path/to/folder -type f -delete

15
GNU find(ほとんどのLinuxディストリビューションで使用されている)は、を使用してファイルを削除できることを言及する価値があるでしょう-delete。これにより、引用符または改行文字を含むファイルに関する問題も回避できます(ただし、GNU find -print0およびGNU xargの-0オプションを使用して修正できます)。
DerfK

3
@DerfK、いい発言!また、皆さんの多くは、一緒にプレイする傾向があるxargs一方でfindあり-exec command {} +、構文を。
poige

5

あなたはすべてを正しくやっています。問題を引き起こすのは'*'です(シェルは、それをの代わりにファイルのリストに展開しますfind)。正しい構文は次のとおりです。

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(後者はに長い名前を渡すため、少し効率が悪いxargsですが、ほとんど気付かないでしょう:-))

あるいは、このように'*'をエスケープすることもできます(ただし、その場合は "。"と ".."も削除しようとします。これは大したことではありません-少し警告が表示されます:-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

ファイル名にスペースが含まれている場合は、これを使用します。

find . -type f -print0 | xargs -0 rm -f

1
スペースを含むファイル名がある場合、これは機能しません。
user9517はGoFundMonicaをサポートします11

@lain:はい、ホワイトスペースのトリックを含めるために答えを編集しているところです:
dtoubelis

3

次のコマンドは、現在のディレクトリからすべてのファイルを削除します。

find . -type f -exec rm {} \;

2
-name '*'「すべてのファイル」を意味するものではありません。ファイルは次のように言われます-type f
。– poige


1

クォンタスへの賛辞は、ここにいくつかの追加があります。

特定の名前パターンのファイルを削除する場合は、次のように記述できます。また、-printが追加され、ファイルの削除中に何が起こっているかを確認できます。

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

これにより、たとえばmydirectoryのすべてのjpegが削除されます。

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