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í quefind /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.
Os recomendamos los siguientes productos relacionados con la informática: