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 ?
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 ?
Odpowiedzi:
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
Oto wyniki kolejnego testu z wykorzystaniem 404 MB z 19 521 plików w 3224 folderach:
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:
Wow, metoda 2 jest prawie trzy razy szybsza niż metoda 1! Będę aktualizować mój plik deletestuff.bat!
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.
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 .
W wierszu polecenia (Start -> Uruchom -> cmd
):
del /f /s /q foldername
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/
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
w 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.
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
rsync
w systemie Linux. Czy jest tu nawet szybciej rmdir
?
del /f/q/s
+ rmdir /s/q
. Jeśli Twoje dir_to_wipe zawiera informacje c:\some_important_dir
, stracisz swoje dane.
Użyj polecenia rd / s z wiersza polecenia.
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.
Zainstaluj Cygwin i użyj rm -r . Ale to prawdopodobnie będzie przesada.
rd /q /s
...
rm
naprawdę tak szybki, jak wbudowany program cmd.exe rd
? Ponieważ emulacja cygwina interfejsu posix jest raczej powolna, ponieważ wymaga dodatkowej pracy, co rm
tak naprawdę nie docenia.
rm -rf
. Około 10 minut przerwałem i wróciłem do niego, del /f/s/q
ponieważ w Cygwin użycie dysku wyniosło tylko 50%. Poniżej del
zuż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ń.
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.
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:
Następnie wykonaj konfiguracje za pomocą pliku wsadowego i użyj polecenia cmdlet programu Powershell, aby zarejestrować i zmierzyć ich wydajność.
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
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
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
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ś).