Вопрос: Массовое удаление файлов в Windows


У меня есть каталог, содержащий ~ 3 миллиона файлов в некоторых подкаталогах на сервере Windows 2008. Вручную удалять файлы с помощью SHIFT + DEL в корневом каталоге занимает много времени. Есть ли другой способ сделать удаление в Быстрее манера?


128
2017-08-07 07:00


Источник


Также задан здесь в Stack Overflow: stackoverflow.com/questions/186737/... - Hugo
Как я мог настроить магнит только на некоторые подкаталоги? - Jaime Hablutzel
@Jaime С устойчивой рукой, как настоящий программист ... ;-) xkcd.com/378 - Legionair
Что, если это SSD-накопитель? - Benjamin Weiss


Ответы:


Мне регулярно нужно удалить много файлов и каталогов с зашифрованного диска WinXP, обычно около 22 ГБ 500 000 файлов в 45 000 папок.

Удаление с помощью проводника Windows - это мусор, потому что он тратит много времени на перечисление файлов. Обычно я перемещаю содержимое, которое мне нужно удалить, в C: \ stufftodelete и иметь пакетный файл deleteestuff.bat для rmdir /s/q C:\stufftodelete, Это запланировано на ночь, но иногда мне нужно запустить его в течение дня, чтобы быстрее, чем лучше.

Ниже приведены результаты быстрого теста времени небольшого 5.85 МБ образца из 960 файлов в 303 папках. Я запустил метод 1, а затем метод 2, а затем сбросил тестовые каталоги.

Метод 1 удаляет файлы и структуру каталогов за один проход:

rmdir /s/q foldername

Метод 2 имеет первый проход для удаления файлов и выходов в nul, чтобы избежать накладных расходов на запись на экран для каждого файла singe. Второй проход затем очищает оставшуюся структуру каталогов:

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 секунды

Вот результаты другого теста с использованием 404 МБ из 19 521 файлов в 3243 папках:

  • Способ 1: 2 минуты 20 секунд
  • Способ 2: 2 минуты 33 секунды

Так что в этом не так много, вероятно, слишком близко, чтобы судить по одному тесту.


Редактирование: я перепробовал гораздо больше данных, это типичный случай для меня: 28,3 ГБ из 1 159 211 файлов в 146 918 папках:

  • Способ 1: 2 часа 15 м, 2 часа 34 м: средний: 2 часа 25 минут
  • Метод 2: 49 м, 57 м: средний: 53 минуты

Вау, метод 2 почти в три раза быстрее, чем метод 1! Я буду обновлять свой файл delete.bat!


166
2018-05-27 11:27



RD / S / Q отлично работает, если вы укажете абсолютный путь, но не работает при относительных путях. Есть ли решение? - Michael S.
@Hugo: Hugo, вопрос: В приведенных выше тестах времени для одного или обоих методов вы считали файлы непосредственно перед запуском метода? Я спрашиваю, потому что содержимое папки может быть уже в кеше операционной системы. Благодаря! - William C
@WilliamC: Я точно не помню, но для повторных удалений с одним и тем же содержимым я посчитал бы непосредственно перед одним удалением и не буду повторять его для других удалений (поскольку я уже знал номера). - Hugo
Включает ли ваше время перемещение 1,159,211 файлов в 146 918 папках на C:\stufftodelete папка? - martineau
@martineau: Нет, тестовые тайминги (если я правильно помню) удаляли папки на месте. Обычно для перемещения папки обычно требуется C:\stufftodelete`. Copying is slooow, but you don't want that. If you have another drive (eg E:), also create E: \ stufftodelete` и всегда перемещать файлы в папку того же диска и включать их в файл deleteestuff.bat (который также воссоздает папки в конце в следующий раз). - Hugo


Если вам нужно регулярно удалять большие деревья каталогов, подумайте о сохранении корня этого дерева каталогов на отдельном разделе, а затем просто быстро отформатируйте его, когда вам нужно удалить все. Если вам нужно автоматизировать это, вы можете использовать эту команду DOS:

echo Y | format Z: /FS:NTFS /X /Q

где Z: ваш «изменчивый» раздел. Примечание: раздел не должен иметь метки. Я писал об этом Вот,


16
2017-10-31 06:37



И используйте жесткую ссылку для создания соединения между диском и каталогом, где хранятся файлы, если требуется точный путь к каталогу. - Nime Cloud
@NimeCloud: Hardlinks не может перекрещивать файловые системы или каталоги ссылок. - grawity
Однако символические ссылки Можно перекрестные файловые системы и каталоги ссылок, поэтому они могут быть уместны здесь. См. Команду mklink (Vista и позже, в противном случае используйте соединение от Марка Руссиновича / SysInternals). - Robert Calhoun


В командной строке (Пуск -> Выполнить -> cmd):

del /f /s /q foldername 

9
2017-08-07 07:07



Это здорово, потому что в нем перечислены его удаление ... но это то же, что и в скорости. - bobobobo
О-о-о-о-о-о-о-оа. Не так хорошо, как я думал. Он быстро удаляет файлы, но оставляет дерево каталога неповрежденным. - bobobobo
Что я могу добавить, занимает довольно много времени, чтобы очистить с помощью rd. - bobobobo
@bobobobo Я сделал несколько тестов с ~ 30 ГБ / 1 000 000 файлов / 15 000 папок, а del + rd почти в три раза быстрее, чем просто rd: superuser.com/questions/19762/mass-deleting-files-in-windows/... - Hugo
Я думаю, что rmdir быстрее, это некоторые ситуации. дель , / f / s / q приятно, потому что вы также можете удалить содержимое всех файлов в каталоге. После того, как вы закончите, это просто вопрос об удалении папок, который достаточно быстр. Кроме того, помните атрибут -s -h -r , / s, если вы не можете удалить папки из-за скрытых файлов. - Sun


В дополнение к скопированию / перемещению файлов очень быстро (используя собственный API), TeraCopy может удалять файлы, и это очень быстро. С тех пор, как я узнал TeraCopy, я не использую компьютер без его установки (если я собираюсь копировать / перемещать / удалять).

Тот же установщик устанавливает версию x64, но для ее использования вы должны вручную принудительно ее использовать.

Бета, которую я рекомендую для стабильных версий: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


6
2018-05-25 14:00



Вы когда-нибудь делали или видели некоторые похожие на время сравнения TeraCopy vs rmdir или del или del + rmdir? - Hugo
@Hugo: Глупый вопрос. Я бы не рекомендовал TeraCopy, если бы это было не видно простым глазом, это быстрее! - rautamiekka
Как вы оцениваете это на 10% быстрее? В два раза быстрее? В десять раз быстрее? В миллион раз быстрее? Это было бы здорово, если бы вы могли потратить время на rmdir с двумя большими и идентичными наборами тестов. - Hugo
@Hugo: в зависимости от размера файла / количества и фрагментации и процессора, от 2x до 5x, но в целом слишком быстро, чтобы рассмотреть возможность использования встроенных в Win-средств средств для больших и / или crapload файлов, если вы сохранили момент или 20. [переиздан после случайного нажатия Enter] - rautamiekka
Спасибо! Я много лет использую TeraCopy, но никогда не знал о функции массового удаления. И ты прав, это много, МНОГО быстрее! - AzDayton


Я сделал файл 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

он выполняет работу в два этапа, один, он пытается удалить файлы. И второе - попытаться взять на себя ответственность за файлы. Y должен быть изменен в соответствии с вашим местным (стенд для да на английском языке). Если вы не выполняете задачу (например, если вы не выполняете ее с разрешения), вы должны запустить ее снова. Однако второй раунд не будет пытаться удалить файлы, удаленные в первом раунде, так что это может быть довольно быстро.


Как это использовать. Сохраните как delfolder.bat в маршруте маршрута (например, c: \ windows), затем запустите его как

 delfolder "foldername"   

где имя папки - это имя папки

В моем тесте удаление 123'000 файлов заняло 3 минуты (sata 7200rpm). УРА!


4
2018-02-09 17:35



Этот маленький сценарий потрясающий. Спасибо. - Jeson Martajaya
Обычно вы не должны использовать %1 в сценарии, но "%~1", Таким образом, если аргумент был передан с кавычками, он будет децитировать и запрограммирован. Если он не был передан с кавычками, он цитируется. - Benoit


Использовать команда rd / s из командной строки.


3
2017-08-07 07:09



Нет. Это так же медленно, как удаление из проводника. - bobobobo
Хорошо, все в порядке. В любом случае, работает лучше, чем del / f / s / q. - bobobobo
Ну, это намного лучше, чем использовать Explorer для удаления. Он продолжает удаляться, даже если удалите или два не удастся (когда проводник дросселирует и прерывает) - bobobobo


Использование приведенного ниже кода обычно хорошо работает для меня.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe

3
2017-12-23 15:47



Добавьте `> nul` в конец этого вызова robocopy, чтобы вам не нужно было видеть его на экране. - JoshDM
Это похоже на использование rsync в Linux. Это даже здесь быстрее, чем rmdir? - Hastur
FYI, этот robocopy сильно отличается от del /f/q/s + rmdir /s/q, Если у вашего dir_to_wipe есть junktions to c:\some_important_dir вы потеряете свои данные. - Pavel


Лучшим практическим решением, вероятно, является перемещение папки в сторону (например, корзина), а затем ее удаление. Это займет много времени, но, по крайней мере, это будет в стороне.

Я уверен, что время, необходимое для удаления всех этих файлов, является неотъемлемым требованием задачи, а не неэффективностью в деле удаления.


1
2017-10-06 21:59





устанавливать Cygwin и использовать rm -r, Но это, вероятно, будет излишним.


1
2017-10-06 23:45



Это в точку такой же как rd /q /s ... - Joey
Слишком много задач, и почти эквивалентная скорость! - adeelx
Это не хуже, чем несколько других инсталляционных инструментов - X-and-use - ответы здесь, и их нельзя проголосовать, если они не существуют. - JdeBP
Есть cygwin rm действительно так же быстро, как cmd.exe встроенный rd? Поскольку эмуляция cygwin интерфейса posix довольно медленная, так как требует выполнения дополнительной работы, это rm на самом деле не оценивает. - Jan Hudec
В ожидании большой коллекции файлов для удаления у меня было достаточно времени, чтобы установить Cygwin и попробовать rm -rf, Около 10 минут я прервал и вернулся del /f/s/q потому что под Cygwin использование диска составляло всего 50%. Под del, использование диска привязано к 100%. Поэтому я считаю, что это должно быть быстрее. Для обоих методов использование процессора составляет <1%. Я не уверен в номере файла, потому что я закрыл Windows File Deleter после того, как потратил 10 минут на вычисление. - Derek Ziemba


У вас включено короткое имя файла? Если это так, вам это действительно нужно? Удаление файла - это только метаданные. Поэтому, если у вас удвоено количество имен для удаления, объем работы значительно выше.


1
2018-05-31 12:40