私は、Windows 2008サーバ上の特定のサブディレクトリに300万個以上のファイルを含むディレクトリを持っています。ルートディレクトリのSHIFT+DELで手動でファイルを削除するのは時間がかかります。もっと早く削除する方法はありませんか?
146 None 2009-08-07
警告: ディレクトリへのシンボリックリンクがある場合、 del
はシンボリックリンクではなく実際のディレクトリを削除します。これには十分に注意して、ターゲットディレクトリ内にシンボリックリンクがないことがわかっていない限り、これらのコマンドを実行しないでください
私は定期的にWinXPの暗号化されたドライブからたくさんのファイルやディレクトリを削除する必要があります
Windowsのエクスプローラで削除するのは、ファイルを列挙するのに時間を浪費するのでゴミだ。通常、削除したいものを C:\stufftodelete に移動して、rmdir /s/q C:\stufftodelete
に deletestuff.bat のバッチファイルを作成している。これは夜に実行する予定だが、日中に実行する必要がある時もあるので、早い方がいい
これは、5.85 MB の小さなサンプルで、960 個のファイルを 303 個のフォルダに保存した場合のクイックタイムテストの結果です。私は方法1を実行した後、方法2を実行し、テストディレクトリをリセットしました
方法1は、ファイルとディレクトリ構造を1回のパスで削除します
rmdir /s/q foldername
方法2では、1回目のパスでファイルを削除してnulに出力し、1つのファイルごとにスクリーンへの書き込みのオーバーヘッドを回避します。2回目のパスで残りのディレクトリ構造をクリーンアップします
del /f/s/q foldername > nul
rmdir /s/q foldername
- 方法1:17.5秒、14.9秒、13.9秒、14.8秒、13.8秒:平均14.98秒
- 方法2:14.3秒、12.1秒、11.7秒、14.2秒、11.8秒:平均12.82秒
3,243フォルダの19,521ファイルのうち404MBを使用した別のテスト結果がこちらです
- 方法1:2分20秒
- 方法2:2分33秒
だから中にはあまり入っていないし、おそらく一回のテストで判断するには近すぎます
編集:私ははるかに多くのデータで再テストしました、これは私のための典型的なケースです:146,918フォルダ内の1,159,211ファイルの28.3 GB
- 方法1:2時間15分、2時間34分:平均2時間25分
- 方法2:49m、57m:平均。53分です
うわー、方法2は方法1よりも3倍近く速い!deletestuff.batを更新します!
187 Hugo 2011-05-27
大きなディレクトリツリーを定期的に削除する必要がある場合は、そのディレクトリツリーのルートを別のパーティションに保存し、すべてを削除する必要があるときには、それをクイックフォーマットすることを検討してください。これを自動化する必要がある場合は、以下の DOS コマンドを使うことができます
echo Y | format Z: /FS:NTFS /X /Q
ここで Z: は ‘揮発性’ パーティションです。注意: パーティションにはラベルを付けてはいけません。このことについては こちら にブログを書きました
18 Mr. Bungle 2011-10-31
コマンドプロンプトで(Start -> Run -> cmd
)
del /f /s /q foldername
10 lmsasu 2009-08-07
独自の API を使って)高速にファイルをコピー/移動できることに加えて、TeraCopy はファイルを削除することができ、それもまた高速です。TeraCopy を知って以来、TeraCopy がインストールされていないパソコンは使わないようにしています(コピー/移動/削除する場合)
同じインストーラでx64版をインストールしますが、使用するには手動で強制的にインストールする必要があります
安定版よりもおすすめのベータ版。http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
7 rautamiekka 2011-05-25
同じことをするバットファイルをやってみました
@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T
それは2つのステップで仕事をします、1つは、ファイルを削除しようとします。yはあなたのローカルに応じて変更する必要があります(英語ではyesのスタンド)。タスクに失敗した場合(例えば、許可のために失敗した場合)、あなたはそれを再度実行する必要があります。しかし、第二ラウンドは、最初のラウンドで削除されたファイルを削除しようとはしませんので、それはかなり迅速である可能性があります
使い方は以下の通りです。delfolder.bat としてパスルート(例えば c:\windows)に保存してから、次のように実行してください
delfolder "foldername"
ここで、foldernameはフォルダの名前です
私のテストでは、123,000個のファイルを削除するのに3分かかりました(SATA 7200rpm)。やったー
6 magallanes 2012-02-09
以下のコードを使用すると、通常はうまく動作します
mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
4 Benoit 2011-12-23
コマンドプロンプトから rd /s コマンド を使用してください
3 JP Alioto 2009-08-07
一番現実的な解決策は、フォルダをどこかに移動させて(ごみ箱など)、削除を開始することでしょう。時間はかかりますが、少なくとも邪魔にはならないでしょう
それらのファイルをすべて削除するのに必要な時間は、削除の実装の非効率ではなく、タスクの固有の要件であると私は確信しています
2 Ryan C. Thompson 2009-10-06
Cygwinをインストールし、rm -rを使用します。しかし、それはやりすぎになりそうです
1 CarlF 2009-10-06
ショートファイル名の生成を有効にしていますか?もしそうなら、本当に必要なのでしょうか?ファイルを削除するのは、メタデータを表示するだけです。そのため、削除する名前の数が2倍になってしまうと、作業量が大幅に増えてしまいます
1 MSalters 2011-05-31
この2つのアプリのどちらかを試してみましたか?
最速のパフォーマンスを得たい場合は、上書きの数を0に設定してください。これはオプションをクリックして、ダイアログの下部にある値を変更することで行います
ソース]フィールドに削除するパスを入力し、[削除]をクリックします
これらのアプリはファイルをごみ箱に入れません。注意して使用してください
0 Stephen Kellett 2010-04-03
これは、先に述べた回答の中で行われたステップを補完するために提供されています
上記の2つの方法は非常に効果的なように見えますが、パフォーマンスを決定するのは、全く同じ条件でベンチされていない限り難しいでしょう
- 物理ハードドライブのデバイスとモデル
- 好ましくは、ATTO/Crystal Diskのデータをクローニングする前にベンチマークを行いました
- 同じパーティション/ボリュームの位置と形状
- これを行う方法は、サンプルのパーティション/フォルダをデフラグして、2つの全く同じタイプのハードドライブ(前のステップから)と全く同じようにクローンを作成することです
その後、バッチファイルを介して設定を実行し、Powershell Cmdlet を使用してパフォーマンスを記録して測定します
- 理想的には、類似の活動の再帰性によるキャッシングの偏りを防ぐために、いくつかのメカニズムを追加します
以下は、実験してみたものの、決定的な性能/結果が得られなかったサンプルフォルダ(合計サイズという名前)です
r.bat
rmdir /s/q 3.2G
rd.bat
del /f/s/q 3.3G > nul rmdir /s/q 3.3G
- 出力されたLogファイルを掲載していたのですが、フォルダファイルのサイズや分布などでばらつきが大きいと思います
Powershell:
PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt
PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
0 community wiki 2017-06-15
Hugoからの回答が最速ですが、最初のパスで隠しファイルやシステムファイルを削除しないので、より完全な解決策が必要な場合はパラメータ/aを使用してください
del /f /s /q /a foldername > nul
rmdir /s /q foldername
MagallanesによるBATファイルについて、takeownとicaclsには十分注意してください。ハードリンクは同じパーミッションと所有者を共有しているため、削除したいフォルダ内にunsaturated hardlinksがある場合、takeownとicaclsを使用するとフォルダ外のファイルのパーミッションと所有者が変更されます
ツール ln.exe を使用すると、フォルダ内でハードリンクされているすべてのファイルをリストアップし、それらがフォルダ外のファイル(不飽和ハードリンク)にハードリンクされているかどうかを知ることができます
ln.exe --enum foldername > HardlinksList.txt
0 liamZ 2017-12-13
複数のファイルを削除するよりも、フォルダを削除した方が早いです
だから、あなたがコマンドプロンプトの代わりにマウスを使用することを好む場合は、ディレクトリを作成し、そこにファイルを移動し、それを削除することができます(あなたが言ったようにShift+Delで)
-1 danijelk 2009-08-07