Una de las cosas que hacen grande al comando find en Linux es lo ágil y maleable que es para poder realizar búsquedas y poder ejecutar secuencias dentro de las mismas de manera automática.
Por ello mismo y sobre todo cuando se quiere realizar una búsqueda recursiva de varios ficheros y mediante un grep, filtrar el contenido deseado.
El comando
De manera básica, el comando sería el siguiente:
find <path> -type f -name '<fileName>' -exec grep -H "<text>" {} \;
Analizando el comando, vemos lo siguiente:
- - type f — Le estamos indicando que solo queremos que nos muestre los ficheros
- - name — Especificamos el nombre o el patrón que queremos dentro del nombre.
- - exec — Se utiliza para ejecutar un comando al obtener un resultado.
Prueba Práctica
Un ejemplo de una secuencia que podríamos llegar a usar en casi cualquier sistema Linux, podría ser la siguiente:
find /var/log/ -type f -name '*.log' -exec grep -H -i "error" {} \;
Con esto, lo que estamos buscando son los fichero .log que tengan la sentencia error (tanto mayúsculas como minúsculas) y obtendríamos un resultado como este:
root@MyHPCraft:~# find /var/log/ -type f -name '*.log' -exec grep -H -i "error" {} \; | more
/var/log/auth.log:Jun 12 00:09:00 MyHPCraft sshd[253709]: error: kex_exchange_identification: Connection closed by remote host
/var/log/auth.log:Jun 12 00:09:01 MyHPCraft sshd[253710]: error: kex_exchange_identification: banner line contains invalid characters
Como se puede ver, lo que nos muestra primero es el nombre del fichero y luego nos muestra la linea donde aparece la palabra clave que hemos buscado.
Otra cosa que podemos hacer para mandar los resultados, es exportar el resultado a un fichero para poder analizarlo con tranquilidad.
Esta es una forma fantástica de buscar el contenido de ciertos ficheros de una manera muy ágil y sobre todo, flexible.
Informático de profesión y emprendedor apasionado. Interesado en los sistemas operativos y la cocina. Escritor de manuales por afición / vocación.

