2012-04-01 11 views
2

私は/ tmpに800万のファイルを持っており、それらを削除する必要があります。このサーバーもかなり重要なアプリケーションを実行しており、私はそれをオーバーロードできません。"rm"(削除)ディレクトリに800万のファイルがありますか?

$ ls | grep .| xargs rm 

私のアプリは応答しなくなります。

これらのファイルを削除する方法はありますか?前もって感謝します!

+1

はlinux/unixに属します。 –

+2

ionice -cで実行してください。3 – strkol

+2

nice -n20 rm -rf/tmp/* –

答えて

-1

これを試してみてください。

ls -1 | grep -v -e "ignoreFile" -e "ignoreFile2" | xargs rm -rf 

ls -1ls | grepを簡素化されます。

grep -vは、リストから行を削除します。 (これは既に知られている私は推測している) RM -rf:ちょうど-eフラグ

そして、ちょうど完全な、について説明のためにパターンを分離し、それを削除すべきではない任意のファイルを与える

-r recursive 
-f force 
+0

'-1 'の' -1' | grepは役に立たない。これは 'ls |と厳密に同じです。 grep' – jlliagre

2

grep .は何も付いていません。

チェーンから切り取って、ファイルごとに起動されたプロセスを削除します。それは物事をうまくスピードアップするはずです。これは、空白で窒息すること

ls | xargs rm -rf 

注ので、改善がずっと速い方法は、ディレクトリを削除して再作成することです、もちろん

ls | xargs -I{} rm -v {} 

です。しかし、あなたのスクリプトがディレクトリツリー内で "失われ"、削除すべきでないものを削除しないように注意する必要があります。

rm -rf dir 
mkdir dir 

すべてのファイルを削除し、ディレクトリを削除してから再作成することには若干の違いがあります。すべてのファイルを削除するとのみが表示されるファイルとディレクトリを削除します。ディレクトリを削除して再作成すると、すべてのファイルとディレクトリが削除されます。が表示され、非表示になります

+1

'ls'がその出力がパイプに送られていることが検出された場合、非常に好評の' -1'フラグは不要です。あなたのためにその行動を追加します。 –

2

いいえ、ファイルをソートすることがあり、ファイルリストが必要以上にメモリを消費する可能性があるためlsを使用しないでください。パイプやxargsのような無意味な迂回を追加しないでください。

find . -type f -delete 
+0

あなたは一般的に正しいですが、 'ls'は多くのシェルに組み込まれています。 '-delete'オプションはGNU findのためだけであり、通常は' -exec/bin/rm -f '{}'にエイリアスされているので、コマンドが高速かどうかは不明です。入力するのが短くても、必ずしも要求されたパフォーマンスメトリックではありません。 –

+0

bash、csh、dash、kshまたはzshには組み込まれていません。そこには "dir"というcommand.com/cmd.exeが組み込まれています。それはサッシにも組み込まれていますが、そこには "-ls"と呼ばれています。本質的には、それは組み込みであり、大部分は真実ではありません。 –

+1

GNU findについては、-deleteは、fork + execing rmの余分なフープを経由することなく、unlinkat(少なくともLinuxでは)を使用します。 –

関連する問題