Windowsで大量のファイルを削除すると時間がかかる


34

NTFSディスクを搭載したWindows XPボックスを使用していますが、大量のファイルを削除するのに非常に時間がかかります。フォルダーのツリーで多数のファイルを含むフォルダーを選択し、削除(Shift-delを使用してごみ箱を保存)すると、フォルダー内のファイルの数に正比例するようになるまで時間がかかります確認ボックスが表示されます。その後、フォルダ内の各ファイルを削除するのにさらに時間がかかります。

Windowsでフォルダーを削除し、その中のファイルの数に比例して時間がかからないようにする方法はありますか?


回答:


60

Windowsでフォルダーを削除し、その中のファイルの数に比例して時間がかからないようにする方法はありますか?

私はそうは思いませんが、いくつかの方法は明らかに他の方法よりもずっと速いです。

最悪の方法は、ごみ箱に送ることです。それらを削除する必要があります。次に最悪なのは、Windowsエクスプローラーでのshift + deleteです。削除を開始する前に内容を確認するのに時間がかかります。

次に最適なのはrmdir /s/q foldername、コマンドラインから使用することです。del /f/s/q foldernameも良いですが、ディレクトリ構造を残します。

私が見つけた最良の方法は、2行のバッチファイルで、最初のパスでファイルを削除し、nulに出力して、すべての単一ファイルの画面への書き込みのオーバーヘッドを回避します。次に、2回目のパスで残りのディレクトリ構造をクリーンアップします。

del /f/s/q foldername > nul
rmdir /s/q foldername

これは、Windows XPで暗号化されたディスクでの時間テストに基づいて、単一のrmdirのほぼ3倍の速度で、最大30GB / 1,000,000ファイル/ 15,000フォルダーを削除します。最大rmdir2.5時間、最大del+rmdir53分かかります。詳細はこちら

これは私にとっては定期的なタスクなので、通常、削除する必要のあるものをC:\ stufftodeleteに移動し、それらのdel+rmdirコマンドをdeletestuff.batバッチファイルに入れます。これは夜間に実行するようにスケジュールされていますが、日中に実行する必要がある場合があります。


含めるための> nul
賛成票-Nuktu

1
Windowsでは、古いSDKのバックアップから何千ものファイルをスキャンするのを待つことになりました。少なくとも1時間かかりますが、私の場合は10分かかるかもしれません。繰り返し使用するために、batファイルに入れました:gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos


1

Windowsでフォルダーを削除し、その中のファイルの数に比例して時間がかからないようにする方法はありますか?

ええ、はい、パーティションをフォーマットします。過去9年間に誰もそれを示唆していないことに少し驚いています。

これはかなり急進的ですが、特定のフォルダーに対してこれを頻繁に行うと予想される場合は、そのフォルダー用に別のパーティションを作成する価値があります。


それがあまりにも過激な場合、他の答えはあなたの唯一の希望です。serverfaultの理由については良い説明があります。LinuxおよびXFSファイルシステム用ですが、ここでも同じロジックが適用されます。組み込みのOS機能についてはあまり改善できません。

ただし、削除するすべてのファイルへのパスがわかっている場合は、ディレクトリの内容を一覧表示する呼び出しを保存し、直接removeを呼び出してオーバーヘッドを節約できます。それでもファイルの数に比例します。

個人的には、プログラムが死ななかったことを確認するために、進捗レポートの一部が好きです。だから私はpython経由でものを削除するのが好きです。たとえば、すべてのファイルがサブディレクトリのない1つのディレクトリにある場合:

import tqdm
import sys
import os

location = sys.argv[1]
directory = os.fsencode(location)

with os.scandir(directory) as it:
    for dir_entry in tqdm.tqdm(it):
        try:
            os.remove(dir_entry.path)
        except OSError:
            pass  # was not a file

これにより、12年前のSEAGATE ST3250620NSで約250ファイル/秒が削除されます。あなたのドライブではもっと速くなると思います。

ただし、この時点では単なる最適化であるため、1つのディレクトリに数百万のファイルがない限り、それほど多くは行われません。(私のように、笑、私は何をしましたD :)



0

ファイルをクラウドにバックアップしていないと同時に削除するようにしてください!

多くのクラウドバックアップソリューションでは、ファイルのバックアップ中にファイルがロックされ、バックアップされるまで待つ必要があります。

たとえば、一時ディレクトリ(またはバックアップが不要なもの)でこの問題が発生している場合は、バックアップセットで一時ディレクトリが選択されていないことを確認してください。


0

ディレクトリのいくつかのレイヤーを持つフォルダーは、Windowがそれらをすばやく削除する機能を本当に遅くする傾向があることがわかりました。node_modulesフォルダーに到達するまでに5つのレベルが必要なプロジェクトに取り組んでいました。

del /f/s/q foldername > nul
rmdir /s/q foldername

この状況で私がやることは、node_modulesフォルダーまたは最も深いレベルのディレクトリーにナビゲートし、一度に約12個程度のディレクトリーを選択して削除し始めることです。複数の削除を実行すると、使用していると思われる単一のスレッドではなく、ごみ箱が並列プロセスで動作するようになり、プロセスが劇的に高速化されます。

一番深いディレクトリが空になったら、数レベル上に移動して同じことを行います。これにより削除が削減され、1時間から数分しかかかりませんでした。

それは非常に手作業のプロセスであり、おそらくある程度の成功を収めてスクリプト化できますが、それは私のために働いたものです


0

Hugoの元の回答を使用して、NPMプロジェクトを削除するときに使用する.batファイルを作成しました。パス変数を追加し、パスを一度コピーして貼り付けるだけです。.batファイルをダブルクリックすると、すべての作業が実行されます。すべてを入力する必要はありません。

set path="FOLDER_PATH"
del /f/s/q %path% > nul
rmdir /s/q %path%

使用例:

set path="C:\Projects\My React Project"
del /f/s/q %path% > nul
rmdir /s/q %path%

-2

コマンドプロンプトを使用してみましたか

rmdir /s /q foldername

GUIでのすべての大規模ファイル操作が遅い-主に視覚フィードバック(進行状況バー)を何度も再描画する必要があるため


5
これはナンセンスです。GUIは必要な時間を推定するためにすべてのファイルをカウントする必要があるが、再描画のためではないため、操作が遅くなる場合があります。
ベンダー

間違っています...私は常に大きなフォルダー(主にwin2kサーバー)で作業し、TotalCommanderを使用してアイテムを移動/コピー/削除します。TCを最小化するか、TCの上に別のアプリケーションウィンドウを配置すると、少なくとも50%速く処理されることに気付きました。TCは...まだvisalものを再塗装されていますが、すべてが合成では無視される
nEJC

6
お使いのコンピューターは非常に遅いため、GUI操作はディスクI / Oパフォーマンスに影響しますか?または、TotalCommanderのコーディングは信じられないほど不十分ですか?ディスクは、CPU、RAM、およびビデオカードよりも数百または数千倍遅いです。グラフィックがディスク書き込みを遅くしている場合、大きな問題があります。
シャイニー氏と

1
質問には、「ファイルの数に比例して時間がかからない」という理由がありました。私は50%高速化を求めていません。
シンドリトラスタソン2009

@Sindriコマンドプロンプトの方法で行うと、システムがその魔法を使い始めるまでほとんど遅延がありません。私の知る限り、この前処理はあなたの問題の場所です。
nEJC 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.