xargs
fait toute la magie:
find . -name test -type d -print0|xargs -0 rm -r --
xargs
exécute la commande passée en paramètres, avec les arguments passés à stdin.
Cela utilise rm -r
pour supprimer le répertoire et tous ses enfants.
Le --
indique la fin des arguments, pour éviter qu'un chemin commençant par -
ne soit traité comme un argument.
-print0
indique à find
d'imprimer les caractères \0
au lieu des sauts de ligne; et -0
indique à xargs
de traiter uniquement \0
comme séparateur d'arguments.
Ceci appelle rm
avec de nombreux répertoires à la fois, évitant le surcoût d'appeler rm
séparément pour chaque répertoire.
En alternative, find
peut également exécuter une commande pour chaque fichier sélectionné:
find . -name test -type d -exec rm -r {} \;
Et celui-ci, avec de meilleures performances, car il appellera rm
avec plusieurs répertoires en une seule fois:
find . -name test -type d -exec rm -r {} +
(Remarquez le +
à la fin; celui-ci est équivalent à la solution avec xargs
.)