GNU/Linux >> Tutoriales Linux >  >> Linux

Eliminar archivos y directorios por sus nombres. ¿El fichero o directorio no existe?

Necesito borrar todos los datos compilados:

  • directorios llamados build ,
  • directorios llamados obj ,
  • archivos *.so.

Escribí un comando

find ( -name build -o -name obj -o -name *.so ) -exec rm -rf {} ;

que recorre todos los directorios de forma recursiva y elimina todo lo que necesito.

¿Por qué tengo tal salida al final?
Tal vez debería escribir un comando diferente.

find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory

Respuesta aceptada:

Usa -prune en los directorios que vas a eliminar de todos modos para decirle a find no molestarse en buscar archivos en ellos:

find . ( -name build -o -name obj -o -name '*.so' ) -prune -exec rm -rf {} +

También tenga en cuenta que *.so debe citarse ya que, de lo contrario, el shell puede expandirlo a la lista de .so archivos en el directorio actual.

El equivalente de su GNU -regex -el tipo uno sería:

find . ( -name build -o -name obj -o -name '*?.so' ) -prune -exec rm -rf {} +

Tenga en cuenta que si va a usar una sintaxis específica de GNU, también podría usar -delete en lugar de -exec rm -rf {} + . Con -delete , GNU find activa -depth automáticamente. No ejecuta comandos externos, por lo que es más eficiente y también más seguro, ya que elimina la condición de carrera en la que alguien puede hacer que elimine los archivos incorrectos cambiando un directorio a un enlace simbólico en el medio. find encuentra un archivo y rm lo elimina (consulte info -f find -n 'Security Considerations for find' para más detalles).

find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+.so)' -delete

Linux
  1. Cambiar el nombre de todos los archivos y nombres de directorios a minúsculas en Linux

  2. Encuentra archivos y directorios en Linux como un profesional

  3. Cómo eliminar archivos y directorios en Linux desde la línea de comandos

  4. Cómo encontrar un archivo en Linux en todos los directorios recursivamente

  5. ¿Cómo eliminar todos los archivos en un directorio excepto algunos?

Cómo copiar archivos y directorios en Linux

Encuentre y elimine el archivo más antiguo si hay más de X archivos en un directorio en Linux

Cómo encontrar y eliminar archivos que contienen un texto específico en sus nombres en Linux

Dos comandos para encontrar archivos y directorios en Debian 11 fácilmente

Encuentre archivos y directorios en Linux fácilmente

Encuentre archivos e imprima solo sus directorios principales