Windows 2008サーバー上の特定のサブディレクトリに最大300万個のファイルを含むディレクトリがあります。ルートディレクトリでShiftキーを押しながらDelキーを使用して手動でファイルを削除すると、時間がかかります。削除をより高速に行う他の方法はありますか?
Windows 2008サーバー上の特定のサブディレクトリに最大300万個のファイルを含むディレクトリがあります。ルートディレクトリでShiftキーを押しながらDelキーを使用して手動でファイルを削除すると、時間がかかります。削除をより高速に行う他の方法はありますか?
回答:
警告: ディレクトリへのシンボリックリンクがある場合、シンボリックリンクdel
ではなく実際のディレクトリを削除します。これには細心の注意を払い、ターゲットディレクトリ内にシンボリックリンクがないことがわかっている場合を除き、これらのコマンドを実行しないでください。
WinXPで暗号化されたドライブから多くのファイルとディレクトリを定期的に削除する必要があります。通常、45,000フォルダーにある500,000ファイルのうち約22 GBです。
Windowsエクスプローラーでの削除は、ファイルの列挙に多くの時間を浪費するため、ゴミです。私は通常、削除する必要があるものをC:\ stufftodeleteに移動し、deletestuff.batバッチファイルをに持っていますrmdir /s/q C:\stufftodelete
。これは夜間に実行するようにスケジュールされていますが、日中に実行する必要がある場合があります。
これは、303個のフォルダーにある960個のファイルの5.85 MBの小さなサンプルのクイックタイムテストの結果です。方法1を実行してから方法2を実行し、テストディレクトリをリセットしました。
方法1は、ファイルとディレクトリ構造を1つのパスで削除します。
rmdir /s/q foldername
方法2には、ファイルを削除する最初のパスと、nulへの出力があり、単一ファイルごとに画面に書き込むオーバーヘッドを回避します。次に、2回目のパスで残りのディレクトリ構造をクリーンアップします。
del /f/s/q foldername > nul
rmdir /s/q foldername
3,243個のフォルダーにある19,521個のファイルのうち404 MBを使用した別のテストの結果を次に示します。
そのため、あまり多くはなく、おそらく1つのテストで判断するには近すぎます。
編集:私ははるかに多くのデータで再テストしましたが、これは私にとって典型的なケースです:146,918個のフォルダーにある2159 GBの1,159,211個のファイル:
わあ、方法2は方法1のほぼ3倍高速です!deletestuff.batを更新します!
del
ではなく実際のディレクトリを削除します。これには細心の注意を払い、ターゲットディレクトリ内にシンボリックリンクがないことがわかっている場合を除き、これらのコマンドを実行しないでください。
大きなディレクトリツリーを定期的に削除する必要がある場合は、そのディレクトリツリーのルートを別のパーティションに保存し、すべてを削除する必要があるときはいつでも簡単にフォーマットすることを検討してください。これを自動化する必要がある場合は、次のDOSコマンドを使用できます。
echo Y | format Z: /FS:NTFS /X /Q
Z:は「揮発性」パーティションです。注:パーティションにはラベルがない必要があります。ここでこれについてブログしました。
コマンドプロンプトで(スタート->実行-> cmd
):
del /f /s /q foldername
(独自のAPIを使用して)ファイルを非常に高速にコピー/移動することに加えて、TeraCopyはファイルを削除できます。これも非常に高速です。TeraCopyを見つけて以来、インストールされていないコンピューターは使用しません(コピー/移動/削除を行う場合)。
同じインストーラーがx64エディションをインストールしますが、それを使用するには手動で強制する必要があります。
安定版よりも推奨するベータ:http : //blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
同じことを行うbatファイルを作成しました。
@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つはファイルを削除しようとします。2つ目は、ファイルの所有権を取得することです。 yはあなたの地域に応じて変更する必要があります(英語ではyesを表します)。タスクが失敗した場合(たとえば、許可のために失敗した場合)、再度実行する必要があります。ただし、2回目のラウンドでは、1回目のラウンドで削除されたファイルを削除しようとしないため、非常に高速です。
それを使用する方法。パスルート(たとえばc:\ windows)にdelfolder.batとして保存し、次のように実行します。
delfolder "foldername"
ここで、foldernameはフォルダーの名前です
私のテストでは、123'000個のファイルの削除に3分かかりました(sata 7200rpm)。わーい!
%1
、スクリプトでは使用しないでください"%~1"
。このように、引数が引用符で渡された場合、引用符を外して再引用します。引用符で渡されていない場合は、引用符で囲まれます。
通常、以下のコードを使用するとうまくいきます。
mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
rsync
Linuxでの使用に似ています。ここよりも速くなっていrmdir
ますか?
del /f/q/s
+ とは大きく異なりrmdir /s/q
ます。dir_to_wipeにジャンクションがあるc:\some_important_dir
場合、データを失うことになります。
最良の実用的な解決策は、おそらくフォルダーをどこか(ごみ箱など)に移動してから削除を開始することです。時間がかかりますが、少なくとも邪魔にならないでしょう。
これらすべてのファイルを削除するのに必要な時間は、タスクの固有の要件であり、削除の実装の非効率性ではないと確信しています。
Cygwinをインストールし、rm -rを使用します。しかし、それはやり過ぎだろう。
rd /q /s
です
rm
はcmd.exe builtinと同じくらい高速rd
ですか?posixインターフェースのcygwinエミュレーションは、追加の作業を行う必要があるため、かなり遅いため、rm
実際には高く評価されていません。
rm -rf
。del /f/s/q
Cygwinではディスク使用量が50%しかなかったため、約10分で中断して元に戻りました。でdel
、ディスク使用量は100%に固定されます。だから私はそれが速く削除する必要があると考えています。CPU使用率は両方の方法で1%未満です。計算に10分かかった後、Windows File Deleterを閉じたため、ファイル番号がわかりません。
これら2つのアプリのいずれかを試しましたか?
最速のパフォーマンスが必要な場合は、上書き回数を0に設定してください。これを行うには、オプションをクリックしてから、ダイアログの下部にある値を変更します。
[ソース]フィールドに削除するパスを入力し、[削除]をクリックします。
これらのアプリは、ごみ箱にファイルを入れません。注意して使用してください。
これは、前述の回答で行われた手順を補完および強化するために提供されています。
上記の2つの方法は非常に効果的と思われますが、まったく同じ条件に反していない限り、パフォーマンスを判断することは困難です。
次に、バッチファイルを使用して構成を実行し、Powershell Cmdletを使用してパフォーマンスをログに記録して測定します。
以下は、試してみたが最終的なパフォーマンス/結果を得ることができなかったいくつかのサンプルフォルダー(合計サイズ)です。
r.bat
rmdir /s/q 3.2G
rd.bat
del /f/s/q 3.3G > nul rmdir /s/q 3.3G
パワーシェル:
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
Hugoからの回答は最速ですが、最初のパスで隠しファイルまたはシステムファイルを削除しません。したがって、より完全なソリューションが必要な場合は、パラメーター/ aを使用します。
del /f /s /q /a foldername > nul
rmdir /s /q foldername
MagallanesのBATファイルについては、takeownとicaclsに非常に注意してください。ハードリンクは同じ許可と所有者を共有するため、削除するフォルダーに不飽和ハードリンクがある場合、takeownとicaclsを使用すると、外部のファイルの許可と所有者が変更されますフォルダ。
ツールln.exeを使用すると、フォルダー内にハードリンクされたすべてのファイルを一覧表示し、フォルダー外のファイルにハードリンクされているかどうかを確認できます(不飽和ハードリンク)。
ln.exe --enum foldername > HardlinksList.txt
フォルダの削除は、複数のファイルを削除するよりも高速です。
したがって、コマンドプロンプトの代わりにマウスを使用する場合は、ディレクトリを作成し、そこにファイルを移動して削除できます(前述のようにShift + Delを使用)。