SmythSys IT Consulting

Excluir directorios en las búsquedas con find en Linux. Prune y -not -path

En ocasiones tienes que buscar ficheros en un árbol de directorios Linux, pero quieres excluir directorios de la búsqueda. ¿Cómo se hace con find? Hoy te lo contamos.

Cómo excluir directorios de las búsquedas con find en Linux.

Tienes varias opciones, os dejamos dos de las más usadas -prune  y -not -path de find.

  • -prune. La opción -prune le dice a find que no descienda por ese directorio.  Vamos a ver ciertos ejemplos.
    Recordamos que $ find . -name prueba busca todo con nombre prueba.- $ find . -name prueba -prune   Esto dice que busque todo con nombre prueba y no descienda por los directorios con ese nombre.
    $ find ./* -prune  Aquí find mostrará el contenido del directorio actual pero no descenderá por sus directorios (por prune).¿Cómo hacer que con prune se puedan omitir ciertos directorios y  muestre otros? Con la opción -o -print   . -o es un OR, con lo que podemos poner más comandos que no sigan la pauta del prune. -print muestra el contenido. Ejemplos:

    -$ find . -name prueba -prune -o -print

    Esto excluye el directorio prueba y muestra el resto. Es como si dijera “encuentra prueba, no bajes por ahí, y muestra todo lo demás”.

    $ find . -name prueba -prune -print -o -print

    Encuentra todo lo que sea prueba, no desciendas por ahí pero muéstramelo y luego muestra el resto. Es igual que el anterior pero muestra los resultados prueba encontrados.

     - $ find . -type d -name Azul -prune -o -name "*.jpg" -print

Esto busca todos los ficheros con extensión jpg excepto los que están en el
directorio Azul.
Con esto podéis crear vosotros las combinaciones que os hagan falta.

  • -not -path.
    Path te permite buscar en una ruta, -not -path te excluye esa ruta. Así que

    find /home/user/pedro -type f -not -path "*doc/texto*" -not -path "*images/texto*"

    Busca todos los ficheros en el directorio pedro que no tengan las rutas indicadas.

Uno de los problemas que tiene path es que va a tardar  más porque comprueba en todas las búsquedas si cumple la cadena en -not -path. Podemos optimizarlo usando una combinación de ambos comandos:

find . -path ./docs/privados -prune -o -print

Esto evita el directorio docs/privados y todo lo que haya debajo (prune hace que
no descienda por él) y muestra todo lo demás.

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).