xargs
fa tutta la magia:
find . -name test -type d -print0|xargs -0 rm -r --
xargs
esegue il comando passato come parametri, con gli argomenti passati a stdin.
Questo sta usando rm -r
per eliminare la directory e tutti i suoi figli.
Il --
denota la fine degli argomenti, per evitare un percorso che inizia con -
dall'essere trattato come un argomento.
-print0
dice a find
per stampare \0
caratteri invece di newline; e -0
dice a xargs
per trattare solo \0
come separatore di argomenti.
Questo sta chiamando rm
con molte directory contemporaneamente, evitando il sovraccarico di chiamare rm
separatamente per ogni directory.
In alternativa, find
può anche eseguire un comando per ogni selezionato file:
find . -name test -type d -exec rm -r {} \;
E questo, con prestazioni migliori, poiché chiamerà rm
con più directory contemporaneamente :
find . -name test -type d -exec rm -r {} +
(Notare il +
alla fine; questo è equivalente al xargs
soluzione.)
find /path/to/dir -name "test" -type d -delete
-
-nome: cerca il nome passato. Puoi usare
-regex
per fornire nomi basati su espressioni regolari -
-tipo: cerca i tipi di file.
d
cerca solo directory -
-delete: azione che cancella l'elenco trovato.
In alternativa:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
Come J.F. Sebastiano dichiarato nei commenti:
Potresti usare +
invece di \;
per passare più di una directory alla volta.
un altro modo per farlo è
find . -name test -exec rm -R "{}" \;
Un link utile su find :http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml