web-dev-qa-db-ja.com

Windowsディレクトリから100,000個のファイルを削除する最良の方法は何ですか

1つのディレクトリに100,000を超えるファイルがあるユーザーがいました。 Explorerがメモリをいっぱいにしてマシンがクラッシュする可能性がある間、マシンがロックして長時間使用できなくなります。ディレクトリとコンテンツをダンプする簡単な方法はありますか?コマンドラインdeltreeを使用してみましたが、これはあまりうまくシームしませんでした。

DaveF

追加-

同じユーザー(実際にはクライアント)でこの問題が何度か発生しています。プログラムは、実行中に数十万の一時ファイルを作成します。プログラムが正常に動作する場合は、削除されるので問題ありません。しかし、時々、ファイルの混乱を残して死にます。 rmdirやdelなどのメソッドを使用してみましたが、エクスプローラーを使用するよりも高速ですが、通常は同じ問題が発生します。パーティションが破損し、原因不明のロックされたファイルがあり、一部のファイルには権限の問題があり、削除が機能しなくなります。通常、これらの問題はリブートで修正できますが、この場合、これは本番環境では実行できない重要なシステムであるためです。 Unixでは、rm -rfなどを実行するだけで簡単に実行でき、一般に問題はありません。私たちが試したすべてのコマンドラインツールは、確実に動作するように継ぎ合わせていません。

ところで、アプリケーションは変更されていますが、しばらくは本稼働にはなりません。この問題はおそらく他の人にとって興味深いものでしたが。

更新-システムにMKS Nutcrackerがあるため(コマンドラインユーティリティなし)、プログラマーに単純なrmをノックさせました。これは、del/deltreeなどよりも数オーダー高速です。標準のWindowsシステム管理ツールとして簡単に利用できる単純なアプリがないのは奇妙です。

12

rmdirを使用できます:

rmdir /s /q FOLDERNAME

フラグ:/sは再帰的に削除することを意味し、/qは「静かな」モードです。

15
splattne

私が管理していたサーバーでこの問題を抱えていました。エクスプローラを完全にスキップして、コマンドプロンプトを使用します。フォルダに移動し、「del "

これにより、GUI(エクスプローラーはゴミ箱です)とごみ箱のオーバーヘッドを回避できます。

6
user3913

レガシー16ビットアプリケーションでこれが必要でない限り、短いファイル名の生成を無効にしてパフォーマンスを向上させてください。これは、多数のファイルを使用するディレクトリ操作に大きな影響を与える可能性があります。

Regedt32 select:
"HKLM\system\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameC
reation"=1

次に使用します:

RMDIR/S/Q [ドライブ:]パス

ディレクトリとそのすべてのファイルを削除します。

4
Peter Stuer

その一時フォルダを別のドライブ/パーティションに移動してみませんか?すべてのゴミを削除する代わりに、ドライブ(GUIまたはコマンドライン)をフォーマットできます。クイックフォーマットでは、これはかなり高速です。

3
Michael

これは以前の投稿の組み合わせです

コマンドウィンドウを開きます。
File -> Run -> cmd

ディレクトリを削除
rmdir /s /q FOLDERNAME

OR

ファイルのパターンを削除する
cd \....\directory
del *.[something]

あなたの質問で指摘したように、Windows Explorerは物事を本当に遅くする可能性があります。

あなたのアップデートを見た後、私は自分のものを持っています
これをチェックしてください ファイルリムーバーのリスト

2
Brad Bruce

また、回復コンソールまたはそれらに沿って何かを起動することもできます。 OSの奇妙な問題は完全に無視されます。

1
Yannone

ファイルの削除による破損したパーティション?削除されるファイルの数に関係なく、これはディスクの大きな問題です。

ロックされているものに出会うまで、コマンドラインの削除と削除をできるだけ多く試みます。次に Process Explorer を使用して、そのファイルを開いているプロセスを見つけます。 (可能であれば)そのプロセスを強制終了してから、もう一度削除を実行します。すすぎ、繰り返します:)

1
DougN

Linuxマシンからフォルダをマウントし、そこから再帰的に削除します。

# mount -t cifs //server/share /mnt/tobedeleted -o username=yourshareusername

# rm /mnt/tobedeleted/* -R

Cronジョブを使用して、定期的にファイルを削除することもできます。

1
steve

「ライブ」Linux CD、rm -rfを使用して再起動します。

1
Dave Christian

ちょっとハッキーですが、ファイルをチャンク削除するスクリプトを作成できます。形式はわかりませんが、a〜zの文字で始まるファイルだとすると、

deltree /y a*
deltree /y b*
...
deltree /y z*

選択した削除方法でdeltreeを変更します。おそらく遅くなりますが、エラーが発生しにくくなりますか?

補足:cygwinをインストールしてrmなどのコマンドを取得することもできますおそらくは、1つのファイルでエラーが発生した後でもファイルを削除し続けます。

1
Roy Rico

上記のさまざまな方法が機能します。 cygwinをサムドライブにロードしている場合は、それをローカルUSBに接続し、cygwinシェルを起動して、上記のようにRMコマンドを実行します。これは、UNIXの柔軟性を身近に保つための便利な方法です。

1
user13846

私はdelとrmに勝るものはありませんが、非常に長い時間がかかっても、パーティションが損傷することはありません。ロックされたファイルは、それらを作成したプログラムが予期せずに停止したことが原因である可能性があります。

ファイルを削除できない場合でも、別の一時サブディレクトリに移動できる場合があります。 _todelサブディレクトリを作成してそこに移動するだけです。ファイル自体ではなく、ディレクトリ全体を1レベル上に移動すると、通常はうまく機能します。

それ以外に、削除を高速化する唯一の方法は、ハードディスクをデフラグすることです。一時的な回避策として、このディレクトリをsamba共有に移動するか、NTFSジャンクションを使用してポータブルUSBハードディスクを作成することが考えられます。 (小さなパーティションは、ハードディスク全体を使用するよりも優れて高速です)。その後、ハードディスクを取り出すだけで、別のPCで簡単にフォーマットできます。

1
chayim

Robocopyを使用して空のディレクトリをミラーリングしないのはなぜですか?

空のフォルダを作成して、次のように使用します。

ROBOCOPY C:\ThisIsAnEmptyFolder C:\Users\SomeUser\Desktop\SomeFolderWithTempFiles /MIR
1
NotoriousPyro

他の提案がどれも機能しない場合、I/Oの高速化を検討しましたか?

より良いコントローラー、より速いディスクを購入してください。

または、ファイルが(暗黙的に)一時ファイルであり、サイズが許す場合は、ボックスにRAMを追加(安価)し、RAMディスクをセットアップできますか?

最良の場合、大量のファイルを削除してもパフォーマンスは低下しません。最悪の場合、再起動するとパーティションがクリアされます。

0
tomfanning

ごみ箱にカットアンドペーストしてみてください。すべてのファイルを移動しようとするのを迂回するはずです。ビンを空にすることで何が行われるかはわかりませんが、その場合はおそらくすべてのファイルが処理されます。

0
Erwin Blonk

SHIFT + DELで削除すると、速度に違いがありますか?

0
Kevin Kuphal