Mam katalog o pojemności 30 TB z miliardami plików, które są formalnie wszystkimi plikami JPEG. Usuwam każdy folder plików w ten sposób:
sudo rm -rf bolands-mills-mhcptz
To polecenie po prostu działa i nie pokazuje niczego, czy działa, czy nie.
Chcę zobaczyć, jak usuwa pliki lub jaki jest obecny status polecenia.
rm
progress-information
Junaid Farooq
źródło
źródło
rm -ri
. Będzie fajnie!Odpowiedzi:
Możesz użyć
rm -v
dorm
usunięcia jednej linii na plik. W ten sposób widać, żerm
rzeczywiście działa usuwanie plików. Ale jeśli masz miliardy plików, zobaczysz, żerm
nadal działa. Nie będziesz miał pojęcia, ile plików zostało już usuniętych, a ile pozostało.Narzędzie
pv
może pomóc w oszacowaniu postępu.http://www.ivarch.com/programs/pv.shtml
Oto jak można powoływać
rm
siępv
z PrzykâadowaW tym wymyślonym przykładzie powiedziałem
pv
, że są1000
pliki. Dane wyjściowepv
pokazują, że 562 są już usunięte, czas, który upłynął, wynosi 7 sekund, a oszacowanie do ukończenia to 5 sekund.Niektóre wyjaśnienia:
pv -l
sprawia,pv
że liczyć według nowego wiersza zamiast bajtówpv -s number
informuje,pv
co to jest suma, dzięki czemu można oszacować.logfile
na końcu służy do czystego wydruku. W przeciwnym razie linia statusu zpv
zostanie pomieszana z wyjściem zrm -v
. Bonus: będziesz mieć plik dziennika tego, co zostało usunięte. Ale uwaga, plik stanie się ogromny. Możesz również przekierować do,/dev/null
jeśli nie potrzebujesz dziennika.Aby uzyskać liczbę plików, możesz użyć tego polecenia:
Może to również zająć dużo czasu, jeśli istnieją miliardy plików. Możesz także użyć
pv
tutaj, aby zobaczyć, ile się to liczyłoTutaj napisano, że liczenie 278 tys. Plików zajęło 4 sekundy. Dokładna liczba na końcu (
278044
) jest wyjściem zwc -l
.Jeśli nie chcesz czekać na zliczanie, możesz zgadnąć liczbę plików lub użyć
pv
bez oszacowania:W ten sposób nie będziesz mieć oszacowania do ukończenia, ale przynajmniej zobaczysz, ile plików zostało już usuniętych. Przekieruj do,
/dev/null
jeśli nie potrzebujesz pliku dziennika.Nitpick:
sudo
?rm -r
wystarczy usunąć rekurencyjnie. nie ma potrzebyrm -f
.źródło
pv
, zakładając, że policzenie miliardów plików nie jest zbyt drogie ;-). (Może to zająć prawie tyle samo czasu, ilerm
powinno się zmierzyć!)pv
odświeża pasek postępu tylko raz na sekundę, pomimo jego wkładu. Zatem terminal musi wyświetlać tylko jedną linię zamiast tony co sekundę.pv
wystarczy zwiększyć licznik dla każdej napotkanej nowej linii; to musi być szybsze niż zawijanie linii, a co więcej do wyświetlania linii w terminalu. Myślę, że uruchamianie wpv
ten sposób powoduje, że usuwanie plików jest szybsze niż po prosturm -rv
.rm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
Sprawdź odpowiedź lesmany , jest znacznie lepsza niż moja - szczególnie ostatni
pv
przykład, który nie potrwa dłużej niż pierwotne milczenie,rm
jeśli podasz/dev/null
zamiastlogfile
.Zakładając, że
rm
obsługuje tę opcję (prawdopodobnie dzieje się tak, ponieważ używasz Linuksa), możesz uruchomić ją w trybie pełnym-v
:Jak zauważyło wielu komentujących, może to być bardzo wolne ze względu na ilość danych generowanych i wyświetlanych przez terminal. Zamiast tego możesz przekierować dane wyjściowe do pliku:
i obserwuj rozmiar
rm-trace.txt
.źródło
Inną opcją jest obserwowanie zmniejszania się liczby plików w systemie plików. W innym terminalu uruchom:
Liczba użytych i-węzłów zmniejsza się w miarę
rm
postępu. (Chyba że pliki miały przeważnie wiele łączy, np. Jeśli drzewo zostało utworzone za pomocącp -al
). Śledzi to postęp usuwania pod względem liczby plików (i katalogów).df
bez-i
będzie śledzić pod względem zajmowanej przestrzeni.Możesz także uruchomić,
iostat -x 4
aby zobaczyć operacje We / Wy na sekundę (jak również KiB / s, ale nie jest to bardzo istotne w przypadku operacji We / Wy na czystych metadanych).Jeśli zastanawiasz się nad plikami,
rm
nad którymi obecnie pracujesz, możesz dołączyćstrace
do niego plik i obserwować, jakunlink()
wywołania systemowe (i getdents) wywołują szum na twoim terminalu. npsudo strace -p $(pidof rm)
. Możesz^c
przejść oderwanie,rm
nie przerywając go.Zapominam, czy
rm -r
zmienia katalog na drzewo, które usuwa; jeśli tak, możesz na to spojrzeć/proc/<PID>/cwd
. Jej/proc/<PID>/fd
siła często katalogiem fd otwarte, więc można patrzeć na to, aby zobaczyć, corm
proces jest aktualnie patrzysz.źródło
df -ih
to naprawdę fajny tani sposób na obserwowanierm
postępów./boot
partycji systemowej EFI.Chociaż wszystkie powyższe odpowiedzi są w użyciu
rm
, wrm
rzeczywistości może być dość powolne w usuwaniu dużej liczby plików, jak niedawno zauważyłem podczas wyodrębniania ~ 100 000 plików z archiwum .tar w rzeczywistości zajmowało mniej czasu niż ich usuwanie. Chociaż tak naprawdę nie odpowiada to na zadane pytanie, lepszym rozwiązaniem problemu może być zastosowanie innej metody usuwania plików, na przykład jednej z pozytywnych odpowiedzi na to pytanie .Moją ulubioną metodą jest użycie
rsync -a --delete
. Uważam, że ta metoda działa wystarczająco szybko, aby była warta łatwości użycia w stosunku do najbardziej uprzywilejowanej odpowiedzi na to pytanie , w której autor napisał program C, który należy skompilować. (Zauważ, że spowoduje to wyprowadzenie każdego przetwarzanego pliku na standardowe wyjście, podobnie jakrm -rv
; może to spowolnić proces o zaskakującą ilość. Jeśli nie chcesz tego wyjścia, użyjrsync -aq --delete
lub przekieruj wyjście do pliku.)Autor tej odpowiedzi mówi:
Przekonałem się, że jest to wystarczająco dobre dla moich celów. Również potencjalnie ważne z tej odpowiedzi, przynajmniej jeśli używasz ext4:
źródło
rm
i / lubfind --delete
być skuteczny. Interesujący punkt dotyczący usuwania w kolejności sortowania, aby uniknąć ponownego równoważenia b-drzewa podczas usuwania. Nie jestem pewien, ile to dotyczy innych systemów plików. XFS również nie jest świetny z milionami plików na katalog. IDK o BTRFS, ale mam wrażenie, że może to być dobre dla tego rodzaju rzeczy.Jedną rzeczą, którą możesz zrobić, to uruchomić
rm
proces w tle (bez danych wyjściowych, aby nie został spowolniony), a następnie monitorować go na pierwszym planie za pomocą prostej (a) komendy:find/wc
Kombi można zastąpić dowolnym narzędziem w stanie podać jednostki chcesz.(a) Cóż, stosunkowo proste, w porównaniu do, powiedzmy, fizyki jądrowej, hipotezy Riemanna lub tego, co kupić mojej żonie na Boże Narodzenie :-)
źródło
Jakiś czas temu napisałem coś, aby wydrukować szybkość drukowania linii. Możesz uruchomić
rm -rfv | ./counter
i będzie drukować linie na sekundę / min. Chociaż nie jest to bezpośredni postęp, dostarczy ci informacji zwrotnych na temat tempa postępu, możerm
wędrował do sieciowego systemu plików lub podobnego?Link do kodu znajduje się tutaj:
http://www.usenix.org.uk/code/counter-0.01.tar.gz
źródło