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


12

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

DaveF

追加-

同じユーザー(実際にはクライアント)でこの問題が何度か発生しました。プログラムは、実行中に数十万の一時ファイルを作成します。プログラムが正常に動作する場合、これが終了するとスローが削除されるため、問題はありません。しかし、ファイルの混乱を残して死ぬことがあります。rmdirおよびdelなどのメソッドを使用してみましたが、エクスプローラーを使用するよりも高速ですが、通常は同じ問題が発生します。パーティションが破損し、説明のつかないロックされたファイルがあります。一部のファイルには許可の問題があり、削除が機能しなくなります。通常、これらの問題は再起動で修正できますが、この場合、これは重要なシステムであるため、実稼働時間にはできません。Unixでは、rm -rfなどを実行するだけで、これは迅速であり、一般的には実際の問題はありません。

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

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


回答:


15

以下を使用できますrmdir

rmdir /s /q FOLDERNAME

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


これを試しました-質問にさらに追加します。
デビッドアランフィンチ

これでうまくいくはずです。うまくいきましたか?
s_ruchit 2009年

はい、主に-私は質問で上で見た問題を追加しています。ご意見をありがとうございます。
デビッドアランフィンチ

この答えを受け入れます。しかし、よりシンプルなunixスタイルrmを使用するのがより良い解決策がありますが、これはほとんどのユーザーには利用できないため、99%のユーザーにとってこれが最良の選択です。再帰的に削除する以外のことは何もしない、Windows用に実装されたUNIXスタイルのrmがあるはずです。ところで、プログラマーのMKS remove_tree(上記を参照)がrmdirをスラッシングしたため、問題はWindowsではなく、組み込みアプリです。
デビッドアランフィンチ

6

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

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


これを試しました-質問にさらに追加します。
デビッドアランフィンチ

4

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

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

次に使用します:

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

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


知るのは興味深い。
デビッドアランフィンチ


3

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


1
私たちはこれを試しましたが、これができない場合がありました。これで、クライアントは毎回異なるディレクトリでプログラムを実行します。
デビッドアランフィンチ

パス&ドライブ間のハードリンクを作成して、すなわち:ハードリンク「C:\のファイルが保存された私の愚かなアプリ\」ポイントドライブX:起動時のバッチで
NIMEクラウド

2

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

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

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

または

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

質問で指摘したように、Windowsエクスプローラーは非常に遅くなる可能性があります。

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


過去に数百のファイルのみでこれに気付いていましたが、コマンドラインアプリと同じくらい迅速にエクスプローラを実行できるのは残念です-クライアントに自分でそれを実行させることができました。ご回答有難うございます。
デビッドアランフィンチ

1

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

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

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


それは私が思うことです-IEは破損したファイルですが、なぜNTカーネルによって閉じられないのですか?プログラムの速度は問題であるため、SambaまたはUSBハードディスクを使用するのは簡単ではありません。ただし、クライアントは実行ごとに個別のパーティションを作成し、再フォーマットすることを提案されています。彼らがまだそれを試したかどうかはわかりません。-ありがとう
デビッドアランフィンチ

1

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

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


これを試してみたいのですが、マシンに直接アクセスできず、アプリケーションが停止しました。とにかくありがとう。
デビッドアランフィンチ

1

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


このサーバーはクライアントにとって重要であるため、単に再起動することはできませんが、回答に感謝します。
デビッドアランフィンチ

1

ややハックですが、ファイルをチャンク削除するスクリプトを作成できますが、フォーマットはわかりませんが、ファイルがa〜zで始まると仮定すると、できます

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

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

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


これは試されましたが、実際には問題を解決しませんでした-とにかくありがとう。
デビッドアランフィンチ

MKS Nutcrackerもインストールされていますが、セキュリティ上の理由から、コマンドラインユーティリティは削除されています-選択ではありません。しかし、私たちが行ったことは、自分のrmを書き出すことであり、これは機能します。
デビッドアランフィンチ

1

とりわけ、さまざまな方法が機能します。サムドライブにcygwinをロードしている場合、ローカルUSBにプラグインし、cygwinシェルを起動して、上記のようにRMコマンドを実行できます。これは、Unixの柔軟性を手元に保つ便利な方法です。


これは、システムを管理する際の合理的なソリューションです。
デビッドアランフィンチ

1

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


申し訳ありませんが、サーバーを再起動することはできませんが、答えてくれてありがとう。
デビッドアランフィンチ

1

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

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

# rm /mnt/tobedeleted/* -R

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


これを試してみましたか?
デビッドアランフィンチ

1

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

空のフォルダを作成してから、次を使用します。

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

0

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

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

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

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


大好きですが、クライアントは新しいバージョンのプログラムを期待しているので、あなたがシェルアウトするとは思いません-答えてくれてありがとう。
デビッドアランフィンチ

英国のサーバーRAMは現在、ギガバイトあたり約10英ポンドです。
tomfanning

確かに、顧客はマシンのXを(見積もりから)支払い、Yをこれ以上使う理由はありません。
デビッドアランフィンチ

指定されたサーバーが十分に仕事をしていないためですか?
tomfanning

それは仕事に十分です。問題は、プログラムに修正中のバグがあることです。彼らはこれ以上お金を使うつもりはありません。
デビッドアランフィンチ

0

それをごみ箱にカットアンドペーストしてみてください。すべてのファイルを移動しようとするのをバイパスする必要があります。ただし、ビンを空にするとどうなるかわかりませんが、それはおそらくすべてのファイルを上書きするからです。


クライアントはこれを試してみたが、Explorerを普通に使うよりもずっと良くなかったと思う。ありがとう
デビッドアランフィンチ

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