2009-08-07 07:00:33 +0000 2009-08-07 07:00:33 +0000
142
142

Masowe usuwanie plików w systemie Windows

Mam katalog, który zawiera ~ 3 miliony plików w niektórych podkatalogach na serwerze Windows 2008. Ręczne usuwanie plików poprzez SHIFT+DEL na głównym katalogu trwa wieki. Czy jest jakiś inny sposób na usunięcie plików w szybszy sposób?

Odpowiedzi (14)

180
180
180
2011-05-27 11:27:41 +0000

Ostrzeżenie: jeśli masz symlinki do katalogów, wtedy del usunie rzeczywiste katalogi, a nie symlinki. Bądź bardzo ostrożny i nie uruchamiaj tych poleceń, chyba że wiesz, że nie ma żadnych dowiązań symlinkowych wewnątrz katalogu docelowego.


Regularnie muszę usuwać wiele plików i katalogów z zaszyfrowanego dysku WinXP, zazwyczaj około 22 GB z 500 000 plików w 45 000 katalogach.

Usuwanie za pomocą Eksploratora Windows jest beznadziejne, ponieważ marnuje mnóstwo czasu na wyliczanie plików. Zazwyczaj przenoszę rzeczy, które muszę usunąć, do C:\u2001& i mam plik wsadowy deletestuff.bat do rmdir /s/q C:\stufftodelete. To jest zaplanowane do uruchomienia w nocy, ale czasami muszę uruchomić go w ciągu dnia, więc im szybciej tym lepiej.

Oto wyniki szybkiego testu czasu dla małej próbki 5.85 MB z 960 plików w 303 folderach. Uruchomiłem metodę 1, a następnie metodę 2, a następnie zresetowałem katalogi testowe.

Metoda 1 usuwa pliki i strukturę katalogów w jednym przebiegu:

rmdir /s/q foldername

Metoda 2 ma pierwsze przejście do usuwania plików i wyjścia do nul, aby uniknąć narzutu pisania na ekran dla każdego pojedynczego pliku. Następnie drugie przejście czyści pozostałą strukturę katalogów:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Metoda 1: 17.5s, 14.9s, 13.9s, 14.8s, 13.8s: średnio 14.98 sekund
  • Metoda 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: średnio 12.82 sekund

Oto wyniki innego testu wykorzystującego 404 MB z 19,521 plikami w 3,243 katalogach:

  • Metoda 1: 2 minuty 20 sekund
  • Metoda 2: 2 minuty 33 sekundy

Więc nie ma w tym wiele, prawdopodobnie zbyt blisko, aby ocenić na pojedynczym teście.


Edycja: Przetestowałem ponownie z dużo większą ilością danych, jest to typowy przypadek dla mnie: 28,3 GB z 1,159,211 plików w 146,918 folderach:

  • Metoda 1: 2h 15m, 2h 34m: średnia: 2 godziny 25 minut
  • Metoda 2: 49m, 57m: średnio: 53 minuty

Wow, metoda 2 jest prawie trzy razy szybsza niż metoda 1! Będę aktualizował mój plik deletestuff.bat!

18
18
18
2011-10-31 06:37:53 +0000

Jeśli musisz regularnie usuwać duże drzewa katalogów, rozważ przechowywanie korzenia tego drzewa katalogów na oddzielnej partycji, a następnie po prostu szybko go sformatuj, gdy będziesz musiał usunąć wszystko. Jeśli chcesz to zautomatyzować, możesz użyć tej komendy DOS:

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

gdzie Z: jest twoją ‘lotną’ partycją. Uwaga: partycja nie może mieć żadnej etykiety. Pisałem o tym na blogu tutaj .

9
9
9
2009-08-07 07:07:04 +0000

W wierszu poleceń (Start - Uruchom - cmd):

del /f /s /q foldername
```.
7
7
7
2011-05-25 14:00:51 +0000

Oprócz kopiowania/przenoszenia plików bardzo szybko (przy użyciu własnego API), TeraCopy może usuwać pliki i to też bardzo szybko. Odkąd odkryłem TeraCopy, nie używam komputera bez zainstalowanego programu (jeśli mam zamiar kopiować/przenosić/kasować).

Ten sam instalator instaluje edycję x64, ale żeby z niej skorzystać trzeba ją ręcznie wymusić.

Beta, którą polecam ponad wersje stabilne: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

6
6
6
2012-02-09 17:35:24 +0000

Stworzyłem plik bat, który robi to samo.

@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

wykonuje on pracę w dwóch krokach, po pierwsze próbuje usunąć pliki. A drugi to próba przejęcia własności plików. y powinno być zmienione zgodnie z Twoimi lokalnymi ustawieniami (po angielsku oznacza yes). Jeśli zadanie się nie powiedzie (np. jeśli nie powiedzie się z powodu uprawnień) to musisz uruchomić je ponownie. Jednak druga runda nie będzie próbowała usuwać plików usuniętych w pierwszej rundzie, więc może być całkiem szybka.


Jak go używać. Zapisz jako delfolder.bat w ścieżce (na przykład c:\u200rpm), a następnie uruchom go jako

delfolder "foldername"

gdzie foldername to nazwa folderu

W moim teście usunięcie 123'000 plików zajęło 3 minuty (sata 7200rpm). YAY!

4
4
4
2011-12-23 15:47:15 +0000

Użycie poniższego kodu zazwyczaj działa dobrze dla mnie.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
3
3
3
2009-08-07 07:09:35 +0000

Użyj polecenia rd /s z wiersza poleceń.

2
2
2
2009-10-06 21:59:15 +0000

Najlepszym praktycznym rozwiązaniem jest prawdopodobnie przeniesienie folderu gdzieś poza drogę (np. do Kosza), a następnie rozpoczęcie usuwania go. Zajmie to wieki, ale przynajmniej będzie z drogi.

Jestem całkiem pewien, że czas wymagany do usunięcia wszystkich tych plików jest nieodłącznym wymogiem zadania, a nie nieefektywnością w implementacji usuwania.

1
1
1
2009-10-06 23:45:48 +0000

Zainstaluj Cygwin i użyj rm -r. Ale to może być zbyteczne.

1
1
1
2011-05-31 12:40:36 +0000

Czy masz włączone generowanie krótkich nazw plików? Jeśli tak, to czy naprawdę tego potrzebujesz? Usunięcie pliku to tylko operacja na metadanych. Więc jeśli masz dwa razy więcej nazw do usunięcia, ilość pracy jest znacznie wyższa.

0
0
0
2017-12-13 19:46:11 +0000

Odpowiedź od Hugo jest najszybsza, ale nie usuwa ukrytych lub systemowych plików w pierwszym przejściu, więc jeśli chcesz bardziej kompletnego rozwiązania użyj parametru /a:

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

Co do pliku BAT autorstwa Magallanes , bądź bardzo ostrożny z takeown i icacls, ponieważ hardlinki dzielą te same uprawnienia i właścicieli, więc jeśli w folderze, który chcesz usunąć są nienasycone hardlinki , użycie takeown i icacls zmieni uprawnienia i właścicieli plików poza folderem.

Używając narzędzia ln.exe możesz wyświetlić listę wszystkich plików powiązanych hardlinkiem wewnątrz folderu i wiedzieć, czy są one powiązane z plikami poza folderem (nienasycone hardlinki):

ln.exe --enum foldername > HardlinksList.txt
0
0
0
2010-04-03 16:30:58 +0000

Czy próbowałeś którejś z tych dwóch aplikacji?

Upewnij się, że ustawiłeś liczbę nadpisań na 0, jeśli chcesz uzyskać najwyższą wydajność. Zrób to klikając na opcje, a następnie zmień wartość w dolnej części okna dialogowego.

Wprowadź ścieżkę do usunięcia w polu Źródło, a następnie kliknij przycisk Usuń.

Te aplikacje nie wyrzucają plików do kosza. Używaj ich ostrożnie.

0
0
0
2017-06-15 12:00:52 +0000

Jest to podane w celu uzupełnienia i rozszerzenia kroków podjętych w poprzednio wymienionych odpowiedziach.

Podane powyżej dwie metody wydają się dość skuteczne, ale określenie ich wydajności będzie trudne, jeśli nie zostaną sprawdzone w dokładnie tych samych warunkach:

  • Fizyczne urządzenie i model dysku twardego
  • Najlepiej, ATTO / Crystal Disk benchmarked przed klonowaniem danych na nich
  • Ta sama partycja / lokalizacja woluminu i geometria
  • Sposobem na to byłoby zdefragmentowanie przykładowej partycji / folderów i sklonowanie ich dokładnie tak, jak są 2 dokładnie te same typy dysków twardych (z poprzedniego kroku)
  • Następnie wykonaj konfiguracje za pomocą pliku wsadowego i użyj Powershell Cmdlet, aby rejestrować i mierzyć ich wydajność.

  • Poniżej znajduje się kilka przykładowych folderów (nazwanych jako całkowity rozmiar), na których eksperymentowałem, ale nie byłem w stanie uzyskać żadnej rozstrzygającej wydajności / wyników.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Zamieściłbym pliki logów wyjściowych, ale wierzę, że różnica jest ogromna ze względu na rozmiary i rozmieszczenie plików folderów itp.

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
-1
-1
-1
2009-08-07 07:13:28 +0000

Usuwanie folderów jest szybsze niż usuwanie wielu plików.

Więc jeśli wolisz używać myszki zamiast wiersza poleceń, możesz utworzyć katalog, przenieść tam pliki i usunąć go (z Shift+Del, jak powiedziałeś).