xargs
hace toda la magia:
find . -name test -type d -print0|xargs -0 rm -r --
xargs
ejecuta el comando pasado como parámetros, con los argumentos pasados a stdin.
Esto está usando rm -r
para borrar el directorio y todos sus hijos.
El --
denota el final de los argumentos, para evitar una ruta que comience con -
de ser tratado como un argumento.
-print0
le dice a find
imprimir \0
caracteres en lugar de saltos de línea; y -0
le dice a xargs
para tratar solo \0
como separador de argumentos.
Esto está llamando rm
con muchos directorios a la vez, evitando la sobrecarga de llamar a rm
por separado para cada directorio.
Como alternativa, find
también puede ejecutar un comando para cada seleccionado archivo:
find . -name test -type d -exec rm -r {} \;
Y este, con mejor rendimiento, ya que llamará a rm
con múltiples directorios a la vez :
find . -name test -type d -exec rm -r {} +
(Tenga en cuenta el +
al final; este es equivalente al xargs
solución.)
find /path/to/dir -name "test" -type d -delete
-
-nombre: busca el nombre pasado. Puedes usar
-regex
por proporcionar nombres basados en expresiones regulares -
-tipo: busca tipos de archivos.
d
solo busca directorios -
-eliminar: acción que elimina la lista encontrada.
Alternativamente:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
Como J.F. Sebastián indicado en los comentarios:
Podrías usar +
en lugar de \;
para pasar más de un directorio a la vez.
otra forma más de hacer esto es
find . -name test -exec rm -R "{}" \;
Un enlace útil para encontrar:http://www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml