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
-regexpor proporcionar nombres basados en expresiones regulares -
-tipo: busca tipos de archivos.
dsolo 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