Ho una directory di 30 TB con miliardi di file che sono formalmente tutti file JPEG. Sto eliminando ogni cartella di file come questo:
sudo rm -rf bolands-mills-mhcptz
Questo comando viene eseguito e non mostra nulla indipendentemente dal fatto che funzioni o meno.
Voglio vedere come sta eliminando i file o qual è lo stato corrente del comando.
Risposta accettata:
Puoi usare rm -v avere rm stampa una riga per file cancellato. In questo modo puoi vedere quel rm sta effettivamente lavorando per eliminare i file. Ma se hai miliardi di file, tutto ciò che vedrai è rm sta ancora lavorando. Non avrai idea di quanti file siano già stati eliminati e quanti ne siano rimasti.
Lo strumento pv può aiutarti con una stima dei progressi.
http://www.ivarch.com/programs/pv.shtml
Ecco come invocare rm con pv con output di esempio
$ rm -rv dirname | pv -l -s 1000 > logfile
562 0:00:07 [79,8 /s] [====================> ] 56% ETA 0:00:05
In questo esempio inventato ho detto a pv che ci sono 1000 File. L'output da pv mostra che 562 sono già stati eliminati, il tempo trascorso è di 7 secondi e la stima da completare è di 5 secondi.
Qualche spiegazione:
pv -lrendepvcontare per newline invece che per bytepv -s numberdice apvqual è il totale in modo che possa darti una stima.- Il reindirizzamento a
logfilealla fine è per un output pulito. Altrimenti la riga di stato dapvsi confonde con l'output dirm -v. Bonus:avrai un file di registro di ciò che è stato eliminato. Ma attenzione, il file diventerà enorme. Puoi anche reindirizzare a/dev/nullse non hai bisogno di un registro.
Per ottenere il numero di file puoi usare questo comando:
$ find dirname | wc -l
Anche questo può richiedere molto tempo se ci sono miliardi di file. Puoi usare pv anche qui per vedere quanto ha contato
$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [ <=> ]
278044
Qui dice che ci sono voluti 4 secondi per contare 278k file. Il conteggio esatto alla fine (278044 ) è l'output di wc -l .
Se non vuoi aspettare il conteggio, puoi indovinare il numero di file o usare pv senza stima:
$ rm -rv dirname | pv -l > logfile
In questo modo non avrai alcun preventivo da finire ma almeno vedrai quanti file sono già stati eliminati. Reindirizza a /dev/null se non ti serve il file di log.
Pignolo:
- hai davvero bisogno di
sudo? - solitamente
rm -rè sufficiente per cancellare ricorsivamente. non c'è bisogno dirm -f.