2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

Elimina i file corrispondenti in tutte le sottodirectory

Come posso rimuovere tutti i file .swp in tutte le mie sottodirectory sotto Linux?

Risposte (5)

147
147
147
2010-02-22 13:59:15 +0000

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.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

Avendo trovato fare la cancellazione stessa rimuovere qualsiasi rischio per lo spazio incorporato nel nome del file, … Per maggiore sicurezza considerate anche l'aggiunta di -type f solo per i file.

4
4
4
2010-02-22 14:11:50 +0000
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
2
2
2
2010-02-22 14:04:52 +0000

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.

0
0
0
2019-11-17 04:04:10 +0000

Se volete eliminare tutti i file da tutte le sottocartelle, potete usare il comando fornito,

$ find . -name \* -type f -delete