xargs fait toute la magie :
find . -name test -type d -print0|xargs -0 rm -r --
xargs exécute la commande passée en paramètre, avec les arguments passés à stdin.
Ceci utilise rm -r pour supprimer le répertoire et tous ses enfants.
Le -- dénote la fin des arguments, pour éviter un chemin commençant par - d'être traité comme un argument.
-print0 indique find pour imprimer \0 caractères au lieu de nouvelles lignes ; et -0 dit xargs pour ne traiter que \0 comme séparateur d'arguments.
Ceci appelle rm avec de nombreux répertoires à la fois, évitant la surcharge d'appeler rm séparément pour chaque répertoire.
Comme alternative, find peut également exécuter une commande pour chaque sélectionné fichier :
find . -name test -type d -exec rm -r {} \;
Et celui-ci, avec de meilleures performances, puisqu'il appellera rm avec plusieurs répertoires à la fois :
find . -name test -type d -exec rm -r {} +
(Notez le + à la fin; celui-ci est équivalent au xargs solution.)
find /path/to/dir -name "test" -type d -delete
-
-nom : recherche le nom passé. Vous pouvez utiliser
-regexpour fournir des noms basés sur des expressions régulières -
-type : recherche les types de fichiers.
dne recherche que les répertoires -
-supprimer : action qui supprime la liste trouvée.
Alternative :
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
Comme J.F. Sébastien indiqué dans les commentaires :
Vous pouvez utiliser + au lieu de \; pour passer plus d'un répertoire à la fois.
encore une autre façon de le faire est
find . -name test -exec rm -R "{}" \;
Un lien utile sur find :http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml