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
-regexper fornire nomi basati su espressioni regolari -
-tipo: cerca i tipi di file.
dcerca 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