
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.gitignoredentro del directorio pero'!'antes de-execpermite invertir el resultado haciendo que se interprete la ausencia de.gitignorecomo 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
