En mi computadora cuando uso:
find . \( -name dirname -type d \) -exec rm -r '{}' ';'
Los directorios se eliminan pero me sale el error:
find: ‘./dirname’: No such file or directory
para cada directorio
Mis directorios no están vacíos, por lo que la opción -delete no funcionará para mí. Encontré la razón de este comportamiento aquí :
- find toma (no necesariamente) la primera entrada en el directorio ./. esto sería, por ejemplo, dir.1 /
- lo compara con el patrón 'dir.?'. ¿coincide? si.
- find ejecuta "rm -r dir.1".
- find intenta ingresar dir.1 / para encontrar el patrón dentro del directorio. no sabe nada sobre el comando exec.
- ya no encuentra dir.1 / más. devuelve ENOENT (mira la salida de strace)
En su lugar, usé esto para evitar:
rm -r `find . -name dirname -type d`
Tenga en cuenta que find todavía intentará volver a aparecer en directorios llamados dirname, lo cual no es realmente necesario y tomará algo de tiempo adicional. Dependiendo de la estructura de su directorio, es posible que pueda solucionar esto con la --depth
opción de búsqueda. Además, si tiene una estructura de directorio como dirname / foo / dirname, obtendrá errores de "No existe tal archivo o directorio" de rm. Para suprimir los errores, puede redirigir stderr a / dev / null o usar el -f
indicador (force) con rm.
-delete
opción.