GNU/Linux >> Linux Esercitazione >  >> Linux

Eliminare miliardi di file da una directory mentre si vedono anche i progressi?

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 rende pv contare per newline invece che per byte
  • pv -s number dice a pv 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 da pv si confonde con l'output di rm -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.

Correlati:come aggiungere i dati al buffer nello script della shell?

Pignolo:

  • hai davvero bisogno di sudo ?
  • solitamente rm -r è sufficiente per cancellare ricorsivamente. non c'è bisogno di rm -f .

Linux
  1. Gestisci la directory Linux /tmp come un capo

  2. Qual è il modo migliore per contare il numero di file in una directory?

  3. Contare il numero di file in una directory utilizzando C

  4. Come spostare tutti i file dalla directory corrente alla directory superiore?

  5. Assicurarsi che i nuovi file in una directory appartengano al gruppo

Come cercare file dal Terminale su Linux

Come escludere una directory durante la ricerca di file in Linux

Comprimi i file durante la lettura dei dati da STDIN

Come copiare i primi 10 file più recenti da una directory all'altra?

Come elencare i file eliminati di recente da una directory?

Come ottenere la dimensione effettiva della directory (da du)?