Se stai cercando di eliminare un numero molto elevato di file contemporaneamente (ho eliminato una directory con 485.000+ oggi), probabilmente ti imbatterai in questo errore:
/bin/rm: Argument list too long.
Il problema è che quando si digita qualcosa di simile rm -rf *
, *
viene sostituito con un elenco di tutti i file corrispondenti, come "rm -rf file1 file2 file3 file4" e così via. Esiste un buffer di memoria relativamente piccolo allocato per la memorizzazione di questo elenco di argomenti e se viene riempito, la shell non eseguirà il programma.
Per ovviare a questo problema, molte persone useranno il comando find per trovare ogni file e passarli uno alla volta al comando "rm" in questo modo:
find . -type f -exec rm -v {} \;
Il mio problema è che dovevo eliminare 500.000 file e impiegava troppo tempo.
Mi sono imbattuto in un modo molto più veloce di eliminare i file: il comando "trova" ha un flag "-elimina" integrato! Ecco cosa ho finito per usare:
find . -type f -delete
Usando questo metodo, stavo cancellando i file a una velocità di circa 2000 file / secondo - molto più velocemente!
Puoi anche mostrare i nomi dei file mentre li elimini:
find . -type f -print -delete
... o mostra anche quanti file verranno eliminati, quindi il tempo necessario per eliminarli:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s