web-dev-qa-db-ja.com

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

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

rmを使用すると、「引数リストが長すぎます」というエラーが表示されます。私はxargsで何かをしようとしましたが、私はShell Guyではないため、機能しません。

find -name * | xargs rm -f
17
FMaz008
$ find /path/to/folder -type f -delete
36
quanta

あなたはすべてを正しく行っています。問題があるのは'*'です(シェルは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
5
dtoubelis

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

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

あなたが試すことができます

find /path/to/folder -type f -print0  | xargs -0 rm -f

または

find /path/to/folder -type f -exec rm -f "{}" +
2
user9517

クオンタスの回答に対する称賛、ここにいくつかの追加があります。

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

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

たとえば、これはmydirectory内のすべてのjpegを削除します。

1
Waltur Buerk