Masowe usuwanie plików w systemie Windows


141

Mam katalog, który zawiera ~ 3 miliony plików w niektórych podkatalogach na serwerze z systemem Windows 2008. Ręczne usuwanie plików za pomocą SHIFT + DEL w katalogu głównym trwa wieki. Czy istnieje inny sposób na szybsze usunięcie ?


1
Zapytany również tutaj na Stack Overflow: stackoverflow.com/questions/186737/…
Hugo

6
Jak mogę skierować magnes tylko na niektóre podkatalogi?
Jaime Hablutzel

7
@Jaime Pewną ręką, jak prawdziwy programista ... ;-) xkcd.com/378
Legionair

Co jeśli jest to dysk SSD?
Benjamin Weiss,

Odpowiedzi:


179

OSTRZEŻENIE: jeśli masz dowiązania symboliczne do katalogów del, usuniesz rzeczywiste katalogi, a nie dowiązania symboliczne. Bądź bardzo ostrożny i nie uruchamiaj tych poleceń, chyba że wiesz, że w katalogu docelowym nie ma dowiązań symbolicznych.


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

Usuwanie za pomocą Eksploratora Windows jest marnotrawstwem, ponieważ marnuje dużo czasu na wyliczanie plików. Zwykle przenoszę rzeczy, które muszę usunąć, do C: \ stufftodelete i mam plik wsadowy deletestuff.bat rmdir /s/q C:\stufftodelete. To ma działać w nocy, ale czasami muszę go uruchomić w ciągu dnia, więc im szybciej, tym lepiej.

Oto wyniki szybkiego testu 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 pierwszy przebieg, aby usunąć pliki i dane wyjściowe do wartości nul, aby uniknąć narzutu pisania na ekranie dla każdego pojedynczego pliku. Drugie przejście następnie usuwa pozostałą strukturę katalogów:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Metoda 1: 17,5 s, 14,9 s, 13,9 s, 14,8 s, 13,8 s: średnio 14,98 sekundy
  • Metoda 2: 14,3 s, 12,1 s, 11,7 s, 14,2 s, 11,8 s: średnio 12,82 sekundy

Oto wyniki kolejnego testu z wykorzystaniem 404 MB z 19 521 plików w 3224 folderach:

  • 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 jednym teście.


Edycja: Przetestowałem znacznie więcej danych, jest to dla mnie typowy przypadek: 28,3 GB z 1 159 211 plików w 146 918 folderach:

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

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


RD / S / Q działa świetnie, jeśli podasz ścieżkę bezwzględną, ale nie działa podczas pracy ze ścieżkami względnymi. Czy jest jakieś rozwiązanie?
Michael S.

1
@ Hugo: Hugo, pytanie: Czy w powyższych testach czasowych dla jednej lub obu metod policzyłeś pliki bezpośrednio przed uruchomieniem metody? Pytam, ponieważ zawartość folderu może już znajdować się w pamięci podręcznej plików systemu operacyjnego. Dzięki!
William C

@WilliamC: Nie pamiętam dokładnie, ale w przypadku wielokrotnych usunięć o tej samej treści policzę bezpośrednio przed tylko jednym usunięciem i nie powtórzę tego w przypadku innych usunięć (jak już znałem liczby).
Hugo,

1
Zarówno rmdir, jak i del kończą się niepowodzeniem, gdy w ścieżce występują nazwy dłuższe niż 256 znaków.
Nicolai Ehemann

1
OSTRZEŻENIE: jeśli masz dowiązania symboliczne do katalogów del, usuniesz rzeczywiste katalogi, a nie dowiązania symboliczne. Bądź bardzo ostrożny i nie uruchamiaj tych poleceń, chyba że wiesz, że w katalogu docelowym nie ma dowiązań symbolicznych.
user0103

18

Jeśli musisz regularnie usuwać duże drzewa katalogów, rozważ przechowywanie katalogu głównego tego drzewa katalogów na osobnej partycji, a następnie po prostu szybko sformatuj je, gdy zajdzie potrzeba usunięcia wszystkiego. Jeśli chcesz to zautomatyzować, możesz użyć tego polecenia DOS:

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

gdzie Z: jest twoją „zmienną” partycją. Uwaga: partycja nie może mieć etykiety. Blogowałem o tym tutaj .


I użyj twardego łącza, aby utworzyć połączenie między dyskiem a katalogiem, w którym przechowywane są pliki, jeśli potrzebna jest dokładna ścieżka do katalogu.
Nime Cloud,

1
@NimeCloud: Hardlinks nie może przenikać systemów plików ani katalogów linków.
grawitacja

5
Jednak dowiązania symboliczne mogą przenikać systemy plików i katalogi dowiązań, więc mogą być odpowiednie tutaj. Zobacz komendę mklink (Vista i później; w przeciwnym razie użyj skrzyżowania z Mark Russinovich / SysInternals.)
Robert Calhoun

9

W wierszu polecenia (Start -> Uruchom -> cmd):

del /f /s /q foldername 

Jest to świetne, ponieważ pokazuje, co usuwa ... ale jest takie samo jak rd pod względem prędkości.
bobobobo

1
Oh woah woah woah. Nie tak dobrze, jak myślałem. Szybko usuwa pliki, ale pozostawia nietknięte drzewo katalogów.
bobobobo

1
Co mogę dodać, zajmuje dużo czasu, aby wyczyścić za pomocą rd.
bobobobo

3
@ bobobobo Zrobiłem kilka testów z ~ 30 GB / 1 000 000 plików / 15 000 folderów, a del + rd jest prawie trzy razy szybszy niż tylko rd: superuser.com/questions/19762/mass-deleting-files-in-windows/...
Hugo

1
Nie powiedzie się, jeśli nazwa ścieżki jest dłuższa niż 256 znaków.
Nicolai Ehemann

7

Oprócz bardzo szybkiego kopiowania / przenoszenia plików (przy użyciu własnego interfejsu API), TeraCopy może usuwać pliki i jest również bardzo szybki. Odkąd dowiedziałem się o TeraCopy, nie używam komputera bez zainstalowanego (jeśli mam skopiować / przenieść / usunąć).

Ten sam instalator instaluje wersję x64, ale aby z niej skorzystać, musisz ją ręcznie wymusić.

Wersja beta, którą polecam w stosunku do stabilnych wersji: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


Czy kiedykolwiek zrobiłeś lub widziałeś jakieś porównania czasu TeraCopy z rmdir lub del lub del + rmdir?
Hugo,

1
@ Hugo: Głupie pytanie. Nie poleciłbym TeraCopy, jeśli nie byłby widoczny gołym okiem, jest szybszy!
rautamiekka

5
Czy oceniasz, że jest to 10% szybciej? Dwa razy tak szybko? Dziesięć razy szybciej? Milion razy szybciej? Byłoby wspaniale, gdybyś mógł zmierzyć czas z rmdir za pomocą dwóch dużych i identycznych zestawów testowych.
Hugo,

1
Dziękuję Ci! Korzystam z TeraCopy od lat, ale nigdy nie wiedziałem o funkcji masowego usuwania. I masz rację, to dużo, DUŻO szybciej!
AzDayton

1
@Amalgovinus Nie. Możesz albo otworzyć program i dodać pliki / foldery poprzez przeciągnięcie lub kliknięcie prawym przyciskiem myszy, albo kliknąć prawym przyciskiem myszy pliki / foldery w Eksploratorze / na pulpicie. Po zakończeniu chodzenia, kliknij „Usuń” i „Przenieś do Kosza”, jeśli chcesz, ale faworyzuję „Usuń z dysku”. Musisz jednak uruchomić TeraCopy jako administrator, aby skonfigurować go tak, aby pojawił się w pulpicie / Eksploratorze prawym przyciskiem myszy, jeśli nie jest to zrobione domyślnie.
rautamiekka

6

Zrobił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 pracę w dwóch krokach, jeden, próbuje usunąć pliki. Drugim jest próba przejęcia własności plików. Należy zmienić y zgodnie z lokalnym (po angielsku „tak”). Jeśli zadanie nie powiedzie się (na przykład jeśli nie powiedzie się, ponieważ ma pozwolenie), musisz je ponownie uruchomić. Jednak druga runda nie będzie próbowała usunąć plików usuniętych w pierwszej rundzie, więc może być dość szybka.


Jak tego użyć. Zapisz jako delfolder.bat na trasie ścieżki (na przykład c: \ windows), a następnie uruchom go jako

 delfolder "foldername"   

gdzie nazwa_folderu to nazwa folderu

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


1
Zwykle nie powinieneś używać %1w skrypcie, ale "%~1". W ten sposób, jeśli argument został przekazany z cudzysłowami, jest on cytowany i rekwotowany. Jeśli nie został przekazany z cytatami, jest cytowany.
Benoit

4

Korzystanie z poniższego kodu zwykle 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

Dodaj `> nul` na końcu tego wywołania robocopy, abyś nie musiał widzieć go na ekranie.
JoshDM

Jest podobny do użycia rsyncw systemie Linux. Czy jest tu nawet szybciej rmdir?
Hastur

Do Twojej wiadomości, ta robocopy bardzo różni się od del /f/q/s+ rmdir /s/q. Jeśli Twoje dir_to_wipe zawiera informacje c:\some_important_dir, stracisz swoje dane.
Pavel P

@Pavel następnie użyj / XJ, aby wykluczyć punkty połączeń i dowiązania symboliczne?
Bernhard

To załatwiło sprawę w przypadku katalogu ~ 36 GB, który miał setki katalogów i plików o długości> 256 znaków, co spowodowało, że „metoda” del / rmdir zawiodła. Zajęło to sekundy, Eksplorator Windows oszacował GODZINY!

3

Użyj polecenia rd / s z wiersza polecenia.


2
Nie. Jest to tak wolne, jak usuwanie z Eksploratora.
bobobobo

Cóż, w porządku. W każdym razie działa lepiej niż del / f / s / q.
bobobobo

3
Cóż, w rzeczywistości jest O DUŻO lepsze niż używanie Eksploratora do usuwania. Nadal usuwa, nawet jeśli usunięcie lub dwa zakończy się niepowodzeniem (w przypadku gdy odkrywca dusi się i przerywa)
Bobobobo

2

Najlepszym praktycznym rozwiązaniem jest prawdopodobnie przeniesienie folderu gdzieś z drogi (np. Kosz), a następnie rozpoczęcie jego usuwania. To zajmie wieki, ale przynajmniej nie będzie przeszkadzało.

Jestem prawie pewien, że czas potrzebny na usunięcie wszystkich tych plików jest nieodłącznym wymogiem zadania, a nie nieefektywnością w realizacji usuwania.


1

Zainstaluj Cygwin i użyj rm -r . Ale to prawdopodobnie będzie przesada.


To dokładnie to samo, co rd /q /s...
Joey

Zbyt wiele zadań i prawie równoważna prędkość!
adeelx

1
Nie jest to gorsze niż kilka innych narzędzi instalacyjnych-X-i-użyj-to tutaj i nie powinno się ich głosować, jeśli tak nie jest.
JdeBP

2
Czy cygwin jest rmnaprawdę tak szybki, jak wbudowany program cmd.exe rd? Ponieważ emulacja cygwina interfejsu posix jest raczej powolna, ponieważ wymaga dodatkowej pracy, co rmtak naprawdę nie docenia.
Jan Hudec

Czekając na usunięcie dużej kolekcji plików, miałem wystarczająco dużo czasu, aby zainstalować Cygwin i spróbować rm -rf. Około 10 minut przerwałem i wróciłem do niego, del /f/s/qponieważ w Cygwin użycie dysku wyniosło tylko 50%. Poniżej delzużycie dysku jest ustalone na 100%. Myślę, że to musi być usuwane szybciej. Zużycie procesora wynosi <1% dla obu metod. Nie jestem pewien numeru pliku, ponieważ zamknąłem narzędzie do usuwania plików systemu Windows po 10 minutach obliczeń.
Derek Ziemba

1

Czy masz włączone generowanie krótkich nazw plików? Jeśli tak, 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

Czy wypróbowałeś którąś z tych dwóch aplikacji?

Pamiętaj, aby ustawić liczbę zastępowań na 0, jeśli chcesz uzyskać najwyższą wydajność. Zrób to, klikając opcje, a następnie zmień wartość na dole okna dialogowego.

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

Te aplikacje nie umieszczają plików w koszu. Używaj ostrożnie.


0

Ma to na celu uzupełnienie i uzupełnienie kroków podanych we wcześniej wymienionych odpowiedziach.

Podane dwie powyższe metody wydają się dość skuteczne, ale określenie wydajności byłoby trudne, chyba że zostaną porównane z dokładnie tymi samymi warunkami:

  • Urządzenie i model fizycznego dysku twardego
    • Najlepiej, aby ATTO / Crystal Disk przeprowadził testy porównawcze przed klonowaniem danych na nich
  • Ta sama lokalizacja i geometria partycji / objętości
    • Sposobem na zrobienie tego byłoby defragmentowanie przykładowej partycji / folderów i sklonowanie ich dokładnie, ponieważ są to 2 dokładnie takie same typy dysków twardych (z poprzedniego kroku)
  • Następnie wykonaj konfiguracje za pomocą pliku wsadowego i użyj polecenia cmdlet programu Powershell, aby zarejestrować i zmierzyć ich wydajność.

    • Idealnie, dodaj kilka mechanizmów, aby zapobiec stronniczemu buforowaniu z powodu ponownego wystąpienia podobnej aktywności.
  • Oto niektóre przykładowe foldery (nazwane jako całkowity rozmiar), na których eksperymentowałem, ale nie byłem w stanie uzyskać żadnych rozstrzygających wyników / wyników.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Opublikowałbym wyjściowe pliki dziennika, ale uważam, że wariancja jest ogromna ze względu na rozmiary i dystrybucję 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

kończy się niepowodzeniem z nazwami> 256 znaków

0

Odpowiedź od Hugo jest najszybsza, ale nie usuwa plików ukrytych ani systemowych 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

O pliku BAT Magallanes , bądź bardzo ostrożny w przypadku takeown i icacls, ponieważ hardlinki mają takie same uprawnienia i właściciele, więc jeśli w folderze, który chcesz usunąć, są nienasycone hardlinks, użycie takeown i icacls zmieni uprawnienia i właścicieli plików na zewnątrz folder.

Za pomocą narzędzia ln.exe możesz wyświetlić listę wszystkich plików dowiązanych w folderze i dowiedzieć się, czy są dowiązane do plików poza folderem (nienasycone dowiązania twarde):

ln.exe --enum foldername > HardlinksList.txt

-1

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

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


2
Katalog powinien zostać utworzony na tej samej partycji, na której znajdują się pliki. Sprawi to, że ruch będzie natychmiastowy. Jeśli nowy folder i pliki znajdują się na osobnych partycjach, cała operacja kopiowania będzie trwać bardzo długo.

5
Skąd pomysł, że usunięcie folderu jest szybsze niż usunięcie plików w nim zawartych? Usunięcie folderu zawiera jako pierwszy krok do usunięcia wszystkich plików w tym folderze, więc nie może być szybsze. Przeprowadzka do kosza to jednak zupełnie inna sprawa, ale nie o to tutaj chodzi.
Joey,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.