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 -l
rendepv
contare per newline invece che per bytepv -s number
dice apv
qual è il totale in modo che possa darti una stima.- Il reindirizzamento a
logfile
alla fine è per un output pulito. Altrimenti la riga di stato dapv
si 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/null
se 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
.