Métodos de pago Abuse

Búsqueda de archivos por contenido en Linux: ack y ripgrep

03.05.2023, 23:33

Utilizar la búsqueda de archivos por contenido en Linux puede reducir significativamente el tiempo y el esfuerzo a la hora de buscar información específica en sistemas de archivos grandes y complejos.

Por qué es necesario buscar archivos por contenido

Esta búsqueda puede ser especialmente útil cuando se desea encontrar archivos que contengan una determinada cadena o palabra clave, o cuando se desea encontrar todos los archivos que coincidan con un determinado patrón o criterio.

La búsqueda de ficheros por contenido puede utilizarse para diversas tareas, como encontrar

  • texto específico en archivos de texto de gran tamaño
  • archivos de configuración y scripts que contengan determinados parámetros o comandos
  • archivos que contienen datos específicos, como nombres de usuario o números de teléfono
  • archivos por tipo de contenido, por ejemplo, para encontrar todos los archivos que contengan imágenes JPEG o documentos PDF.

El objetivo general de la búsqueda de archivos por contenido es facilitar el trabajo con el sistema de archivos y encontrar la información que necesita en el sistema de archivos.

ack

Empecemos con la utilidad ack. Fue creada en 2005 como alternativa a grep y rápidamente se hizo popular entre los desarrolladores.

Tiene varias ventajas sobre grep, incluyendo:

  • Búsquedas más inteligentes en archivos y excepciones. Por defecto, ack sólo busca en archivos que puedan tener sentido, por ejemplo, excluyendo las carpetas .svn o .git. Y puedes añadir tus propias reglas y excepciones;
  • Ack busca por defecto en archivos y directorios ocultos;
  • Ack no intenta buscar en todas partes, incluso en las carpetas del sistema, como grep. Esto significa que puedes encontrar fácilmente archivos ocultos en tu sistema.

Ejemplos de cómo usar ack:

  • Buscar todos los archivos en la carpeta actual y sus subcarpetas que contengan la palabra "test": ack "test"
  • Lo mismo, pero excluyendo los archivos con extensión .bak: ack "test" --ignore-file=match:/.bak$/
  • Buscar todos los archivos de la carpeta actual que contengan la cadena "hola" y mostrar las 2 primeras líneas de cada archivo: ack "hola" --heading --max-count=2

ripgrep

La segunda herramienta interesante es ripgrep. Es similar a ack en muchos aspectos, pero utiliza un algoritmo de búsqueda más rápido, lo que la hace especialmente útil para proyectos grandes.

He aquí algunos ejemplos:

  1. Buscar todos los archivos de la carpeta actual y sus subcarpetas que contengan la palabra "test": rg "test"
  2. Lo mismo, pero excluyendo los archivos con extensión .bak: rg "test" --glob "!*.bak"
  3. Buscar todos los archivos de la carpeta actual que contengan la cadena "hola" y mostrar las 2 primeras líneas de cada archivo: rg "hola" --heading --max-columns=2

Al final vale la pena mencionar fzf. No es sólo un buscador de cadenas como ack y ripgrep. Fzf se utiliza como una utilidad para encontrar archivos, carpetas y elementos en una lista. Por lo demás, funciona de forma similar a ack/ripgrep, pero con la capacidad añadida de filtrar en vivo los resultados. He aquí algunos ejemplos:

  • Buscar archivos que empiecen por la letra F en su ordenador: locate F | fzf -m
  • Salir de la carpeta actual e ir al directorio que quiero: cd **<TAB> | fzf
  • Seleccione la revisión SVN y copie el número en el portapapeles: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

Esperamos que estas herramientas le ayuden a encontrar los archivos y cadenas que necesita de forma rápida y eficaz. Cualquiera que elija, todas ofrecen búsquedas avanzadas que pueden acelerar su trabajo considerablemente.