Elimina i file corrispondenti in tutte le sottodirectory
Come posso rimuovere tutti i file .swp in tutte le mie sottodirectory sotto Linux?
Per rimuovere tutti i file *.swp sotto la directory corrente, usa il comando find
in una delle seguenti forme:
find . -name \*.swp -type f -delete
L'opzione -delete
significa che find cancellerà direttamente i file corrispondenti. Questa è la migliore corrispondenza con la domanda attuale di OP.
Usando -type f
significa che find elaborerà solo i file.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
L'opzione -exec
permette a find di eseguire un comando arbitrario per file. La prima variante eseguirà il comando una volta per file, e la seconda eseguirà il minor numero possibile di comandi sostituendo {}
con quanti più parametri possibile.
find . -name \*.swp -type f -print0 | xargs -0 rm -f
Il piping dell'output a xargs
è usato per formare comandi per file più complessi di quelli possibili con -exec
. L'opzione -print0
dice a find
di separare le corrispondenze con ASCII NULL invece che con un newline, e -0
dice a xargs
di aspettarsi un input separato da NULL. Questo rende il costrutto pipe sicuro per nomi di file contenenti spazi bianchi.
Vedere man find
per maggiori dettagli ed esempi.
Per cercare sotto la mia home directory (e usando GNU ‘find’ e ‘xargs’), userei:
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
L'uso di ‘-print0
’ e ‘-0
’ significa che i nomi saranno delimitati da caratteri ASCII NUL ‘\0’, e questo gestirà percorsi di file con spazi vuoti ecc. nei nomi. Se pensi che potresti avere directory (o file di dispositivo, o FIFO, o altri non-file) sotto la tua directory che terminano con ‘.swp’, potresti aggiungere l'opzione ‘-type f
’ a ‘find’. Se hai solo directory, il comando sopra non riuscirà a rimuoverle rumorosamente.
Se volete eliminare tutti i file da tutte le sottocartelle, potete usare il comando fornito,
$ find . -name \* -type f -delete