Buscando dónde existen archivos con el comando find

Antes de continuar con lo que dejamos abierto en la entrada previa, aquella pregunta sobre si podría hacerse al revés la búsqueda, una observación sobre los títulos de esta entrada y su predecesora. Aunque los títulos pudieran parecer iguales, no lo son. El anterior nos habla de la realización de una búsqueda donde sabemos podría encontrarse lo que buscamos.

En esta entrada, el título busca señalar la necesidad de saber dónde puede estar eso que buscamos. Muy sutil pero interesante como cambia el sentido de una oración por un sólo acento. Recordemos el último comando del post previo:

find . -name .gitignore -mindepth 1 -maxdepth 2

observamos que:

  • Busca archivos nombrados .gitignore
  • Comienza desde el directorio actual (.)
  • Solo incluye coincidencias entre la ruta actual y cualquier subdirectorio, pero no más.

Por ejemplo, si se tiene:

/
|
+ -- proyecto/.gitignore
|
+ -- proyecto/modulo/

El comando devolvería sólo la primer ruta por estar en ella un archivo .gitignore. Ahora, consideremos el caso en el que deseamos la búsqueda contraria, que rutas no contienen aún este archivo. Una forma de lograrlo es con:

find . -type d -mindepth 1 -maxdepth 2 '!' -exec test -e "{}/.gitignore" ';' \! -path ./.git -print

donde:

  • -type d: considera sólo directorios.
  • -exec test -e "{}/.gitignore": verifica si existe un archivo .gitignore dentro del directorio pero '!' antes de -exec permite invertir el resultado haciendo que se interprete la ausencia de .gitignore como positivo.
  • \! -path ./.git: excluye la carpeta .git
  • -print: imprime los directorios que cumplan con los criterios

Ejemplo. Considerando la estructura de directorios descrita anteriormente, el comando analizado imprimiría:

./proyecto/modulo

Porque:

  • Es un directorio
  • Está en el nivel 1
  • No contiene .gitignore
  • No es .git

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.