Видалення великої кількості файлів у Windows відбувається повільно


34

У мене вікно Windows XP з диском NTFS і видалення великої кількості файлів відбувається надзвичайно повільно. Якщо я виберу папку, що містить велику кількість файлів у дереві папок, і видаляю (використовуючи shift-del для збереження кошика), потрібен час, який, здається, буде прямо пропорційним кількості файлів у папці, перш ніж навіть спливає вікно підтвердження. Потім видалення кожного файлу в папці займе ще довший час.

Чи є спосіб видалити папку в Windows і не мати часу, пропорційного кількості файлів у ній?


Відповіді:


60

Чи є спосіб видалити папку в Windows і не мати часу, пропорційного кількості файлів у ній?

Я не думаю, але деякі методи явно набагато швидші, ніж інші.

Найгірший спосіб - відправити в кошик: їх все одно потрібно видалити. Наступне найгірше - зсув + видалення за допомогою Провідника Windows: він витрачає багато часу, перевіряючи вміст, перш ніж щось починати видаляти.

Наступним найкращим є використання rmdir /s/q foldernameз командного рядка. del /f/s/q foldernameтакож добре, але він залишає після себе структуру каталогів.

Найкраще, що я знайшов, - це дворядковий пакетний файл із першим проходом для видалення файлів та виведенням на нуль, щоб уникнути накладних витрат на екран для кожного окремого файлу. Потім другий прохід очищає решту структури каталогів:

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

Це майже втричі швидше, ніж один rmdir, заснований на тестах часу із зашифрованим диском Windows XP, видалення ~ 30 Гб / 1 000 000 файлів / 15 000 папок: rmdirзаймає ~ 2,5 години, del+rmdirзаймає ~ 53 хвилини. Більше інформації тут .

Це звичайне завдання для мене, тому я зазвичай переміщую речі, які потрібно видалити, на C: \ stufftodelete і маю ці del+rmdirкоманди у пакетному файлі deletestuff.bat. Це планується запустити вночі, але іноді мені потрібно запустити його вдень, тим швидше, тим краще.


Обновлення для включення> nul
Nuktu

1
Windows змусив мене чекати сканування багатьох тисяч файлів із резервної копії старого SDK. Це займе не менше години, у моєму випадку це може зайняти 10 хвилин. Я помістив його у файл bat для повторного використання: gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos

Дивіться також ту саму відповідь з додатковою інформацією на superuser.com/questions/19762/mass-deleting-files-in-windows
Воєнний шимпанзе

1

Чи є спосіб видалити папку в Windows і не мати часу, пропорційного кількості файлів у ній?

Ну так, відформатуйте розділ. Я трохи здивований, що ніхто не припускав, що за попередні 9 років.

Це досить радикально, але якщо ви очікуєте робити це часто для певної папки, можливо, варто створити для неї окремий розділ.


Якщо це занадто радикально, інші відповіді - ваша єдина надія. Є гарне пояснення, чому на сервері за замовчуванням . Це для файлових систем Linux та XFS, але тут застосовується та ж логіка. Ви не можете значно покращити функції вбудованої ОС.

Однак, якщо ви знаєте шляхи до всіх файлів, які ви хочете видалити, ви можете заощаджувати на дзвінках, що перелічують вміст каталогу, та виклику безпосередньо видаляти, економлячи накладні витрати. І все-таки пропорційна кількості файлів.

Особисто мені подобаються деякі з доповіді про хід виконання, щоб переконатися, що програма не загинула. Тому я люблю видаляти речі через python. Наприклад, якщо всі файли знаходяться в одному каталозі без підкаталогів:

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

Це видаляє близько 250 файлів / с на 12-річному SEAGATE ST3250620NS. Я припускаю, що це буде набагато швидше на вашому приводі.

Однак на даний момент це лише мікрооптимізація, тому не буде багато чого, якщо у вас в одному каталозі мільйони файлів. (як я, хаха, що я зробив D :)


0

Встановити gnutools for windowsта запустити:

find YOURFOLDER -type d -maxdepth 3 | xargs rm -Rf

0

Переконайтеся, що ви не створюєте резервну копію файлів у хмарі та намагаєтесь одночасно їх видалити!

З багатьма хмарними рішеннями резервного копіювання файли заблокуються під час їх резервного копіювання, і тоді вам доведеться дочекатися їх резервного копіювання.

Якщо у вас виникає ця проблема, скажіть, тимчасовий каталог (або щось, що не потребує резервного копіювання), переконайтеся, що в наборі резервних копій не вибрано тимчасовий каталог.


0

Я виявив, що папки з декількома шарами каталогів, як правило, дуже сповільнюють здатність Windows швидко їх видаляти. Я працював над проектом, де потрібно було 5 рівнів, щоб дістатися до папки node_modules, яку завжди видаляти звіром, навіть якщо

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

Що я в кінцевому підсумку роблю в цій ситуації - це переміщення вниз до папки node_modules або будь-якого каталогу, який має найглибші рівні, і просто почати вибирати та видаляти приблизно десяток або більше каталогів за один раз. Якщо я збираю декілька видалених файлів, це змушує кошик працювати в паралельних процесах, а не окремий потік, який я вважаю, що він використовує, значно прискорює процес.

Після того, як мій найглибший каталог порожній, я піднімаюсь на кілька рівнів і роблю те саме. Це дозволило скоротити делетів, які зайняли мене протягом години лише декілька хвилин.

Це дуже ручний процес, і, швидше за все, він може бути написаний з певним успіхом, але це те, що працює для мене


0

Я використовував оригінальну відповідь Юго, щоб створити .bat файл, який я використовую при видаленні проектів NPM. Я додав змінну шляху, і потрібно лише скопіювати та вставити шлях лише один раз. Двічі клацніть файл .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

всі великі операції з файлами в графічних інтерфейсах відбуваються повільно - в основному тому, що візуальний зворотний зв'язок (панель прогресу) доводиться перефарбовувати багато разів


5
Це нісенітниця. Операція може бути повільною, оскільки графічний інтерфейс повинен рахувати всі файли, щоб оцінити необхідний час, але не через перефарбовування.
Бендер

неправильно ... Я постійно працюю з великими папками (переважно сервер win2k) і використовую TotalCommander для переміщення / копіювання / видалення речей. Я помітив, що якщо я мінімізую TC або поставте інше вікно програми поверх TC-матеріалів, то буде зроблено щонайменше на 50% швидше. TC все ще перефарбовує матеріали з візалом, але все ігнорується в композиції ...
nEJC

6
Ваш комп'ютер настільки повільний, що операції з графічним інтерфейсом впливають на продуктивність вводу / виводу диска? Або TotalCommander просто неймовірно погано кодується? Диск в сотні чи тисячі разів повільніше, ніж процесор, оперативна пам'ять та відеокарта. Якщо графіка сповільнюється, ваш диск пише, у вас є основні проблеми.
Містер Блискучі та Нові

1
Питання "не мало часу, пропорційного кількості файлів" чомусь. Я не шукаю на 50% швидше.
Сіндрі Траустасон

@Sindri Якщо ви це зробите в командному рядку, перед тим, як система почне працювати свою магію, не повинно бути майже ніякої затримки. Наскільки я розумію, ця попередня обробка - це ваша проблема.
nEJC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.