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
-regex
pour fournir des noms basés sur des expressions régulières -
-type : recherche les types de fichiers.
d
ne 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