Cancellare directory piena di files (giga)

Se stai cercando di eliminare un numero molto elevato di file in una sola volta (ho cancellato una directory con 7.485.000 oggi +), probabilmente incorrerai in questo errore:

[sourcecode language=”bash”]/bin/rm: Argument list too long.[/sourcecode]

Il problema è che quando si digita qualcosa del tipo “rm-rf *”, il “*” viene sostituito con un elenco di tutti i file corrispondenti, come “rm-rf file1 file2 file3 file4” e così via. C’è un buffer relativamente piccolo di memoria allocata per la memorizzazione questo elenco di argomenti e se è riempito, la shell non esegue il programma.

Per ovviare a questo problema, un sacco di persone useranno il comando find per trovare tutti i file e passarli uno ad uno per il comando “rm” in questo modo:

[sourcecode language=”bash”]find . -type f -exec rm -v {} \;[/sourcecode]

Il mio problema è che avevo bisogno di cancellare queli 8 milioni di log e sci metteva davvero troppo tempo.
Sono incappato in un modo molto più veloce di eliminare file – il comando “find” ha un “-delete”  perfetto per me! Ecco cosa ho finito per usare:

[sourcecode language=”bash”]find . -type f -delete[/sourcecode]

Utilizzando questo metodo, ho cancellato di circa 2000 file / secondo …  molto più veloce!

È anche possibile visualizzare i nomi dei file mentre li cancellati :

[sourcecode language=”bash”]find . -type d -print -delete[/sourcecode]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *