Cómo realizar búsquedas recursivas en Ubuntu

Por definición, recursivo se refiere a un proceso que puede repetirse o aplicarse indefinidamente. En este caso, una búsqueda recursiva vamos a entenderla como la búsqueda donde se analiza no solamente el nombre de todos los archivos y carpetas en una ubicación específica sino que se analizan los contenidos de los archivos en búsqueda de coincidencias con los términos utilizados. En este artículo explicaré un método muy sencillo por medio de la terminal para buscar de esta forma en pocos segundos. 

Búsquedas con grep

grep es una herramienta incluida por defecto en todas las distribuciones de Linux que permite buscar, en archivos de entrada, por lineas que tengan coincidencia con un patrón dado por el usuario. El comando es muy sencillo y la forma básica para usarlo en el caso de este artículo es el siguiente:  

grep -rnw '/ruta/de/archivos/' -e 'patron'

En el anterior comando, en lugar de escribir /ruta/de/archivo/ debes escribir la ubicación de los archivos en los cuales deseas realizar la búsqueda. En lugar de patron debes escribir los términos de la búsqueda, ya sea una palabra o una frase. grep presentará automáticamente las líneas que tengan alguna coincidencia. 

Explicación

En el caso del comando del ejemplo las opciones utilizadas son las siguientes:

  • -r: esta opción lee todos los archivos que se encuentran en cada directorio y subdirectorio de la ruta indicada. 
  • -n: esta opción es muy útil ya que prefija a cada resultada el número de línea en el que se ubica dentro del archivo. El resultado se muestra como en el siguiente ejemplo. Es muy útil para ubicarse dentro del archivo. 

  • -w: esta opción no es del todo necesaria. Lo que permite es recuperar coincidencias pero en palabras exactas. Es decir, el patrón debe aparecer al inicio o final de una línea o debe estar precedido o sucedido por un espacio por ejemplo. 
  • -e: únicamente indica que lo que le sigue es el patrón a utilizar en la búsqueda. Si utilizas -f podrás indicar un archivo en lugar de un patrón y grep obtendrá los patrones de este. Uno por línea.

Otras opciones que te podrían ser de utilidad son las siguientes:

  • -i: se ignoran por completo mayúsculas o minúsculas. Si por ejemplo no hubiera usado la opción en el siguiente ejemplo no habría recibido ningún resultado. 

  • -v: presenta los resultados invertidos, es decir, encuentra todo aquello que no incluya los términos de búsqueda
  • Otro argumento importante es --include. Con este, podrás realizar búsquedas únicamente en tipos específicos de archivos. Se utiliza de la siguiente forma:
grep -rnw --include \*.txt '/ruta/de/archivos/' -e 'patron'

Es importante aclarar que este método no funciona para cualquier tipo de archivos. No podrás usarlo para buscar en archivos con extensiones de aplicaciones cerradas como Microsoft Office. Para buscar recursivamente en este tipo de archivos debes instalar catdoc y docx2text  y utilizar un script (para saber como ejecutar scripts fácilmente en Ubuntu puedes leer este tutorial que escribí) como el siguiente: 

#!/bin/bash
echo -e "\n
Bienvenido. Este script realizará búsquedas recursivas en archivos .doc y .docx \n
Ingrese la palabra o frase que desea buscar \n"
read patron
find . -name "*.doc" | 
while read i; do catdoc "$i" | 
grep --color=auto -iH --label="$i" "$patron"; done
find . -name "*.docx" | 
while read i; do docx2txt < "$i" | 
grep --color=auto -iH --label="$i" "$patron"; done

Además de todo lo anterior puedes usar patrones de búsqueda utilizando regex o expresiones regulares. Para aprender más sobre este comando y todas sus posibilidades puedes ejecutar lo siguiente en la terminal:

man grep

Si tienes alguna duda o sugerencia para mejorar el artículo o el script no dudes en compartirla en los comentarios. 

Fundador
Seguidor de Jesús. Escribo artículos en mi tiempo libre sobre temas de tecnología que me interesan.