731 - Deja de buscar en Linux como siempre. Hazlo así.

731 - Deja de buscar en Linux como siempre. Hazlo así.

Moderniza Linux: reemplaza find y grep con fd y ripgrep. Tutorial de productividad en terminal, más rápido y simple. ¡Optimiza tus búsquedas ahora!

1:25
-3:15

Durante mucho tiempo he utilizado los comandos find y grep para buscar archivos y contenido dentro de ellos en Linux. Son los comandos habituales que encontrarás en cualquier tutorial a lo largo y ancho de Internet. Sin embargo, la llegado de Rust al ecosistema Linux ha supuesto un punto de inflexión. Algunos desarrolladores han decidido darle una vuelta a la implementación clásica que teníamos de nuestras herramientas. En ocasiones simplemente por hacerlas mas eficientes, pero también en otras ocasiones para dotarlas de mas opciones y posibilidades, y por supuesto, de nuevas características que nos permitan mejorar en nuestro desempeño. Así, como te digo, si buscas en internet, seguro que encontrarás que te siguen indicando que para realizar búsquedas en Linux, tienes que utilizar las herramientas antes mencionadas, pero, esto ya no es así. Como te digo, tenemos a nuestra disposición, nuevas herramientas mucho mas potentes que te van a permitir realizar búsquedas de forma mucho mas eficiente y eficaz

Deja de buscar en Linux como siempre. Hazlo así.

¿Quienes son fd y ripgrep?

Las dos herramientas con las que puedes mejorar sensiblemente tus búsquedas en Linux son fd y ripgrep. Estas dos, son herramientas modernas de lineas de comandos, implementadas en Rust. Su principal ventaja respecto de las clásicas es que son significativamente mas rápidas, y además, cuentan con una sintaxis mucho mas sencilla e intuitiva.

Así fd se especializa en encontrar archivos y directorios. Su enfoque es la simplicidad y velocidad. Por defecto, su comportamiento es mas inteligente que find para el usuario moderno, ya que ignora archivos y directorios ocultos e ignora automáticamente los patrones definidos en archivos .gitignore. Esto no quieres decir que no puedas incluir esos archivos y patrones, sino que simplemente los ignora por defecto.

Por otro lado ripgrep, es una herramienta especializada en buscar patrones de texto dentro de archivos. Su gran baza es la velocidad, lograda gracias a optimizaciones y el uso de expresiones regulares con PCRE2. Además, al igual que fd, por defecto, ignora archivos y directorios que no son de interés, como pueden ser los binarios o los que están el el .gitignore.

Característicafd (find)ripgrep (grep)
Idioma de programaciónRustRust
VelocidadMás rápido que findEl más rápido de su clase
SintaxisSimple e intuitivaSimple, centrada en el patrón
Ignora por defecto.git, .svn, .gitignore, ocultosBinarios, .git, .gitignore, ocultos
SalidaColoreada (archivos y directorios)Coloreada (líneas y coincidencias)
RegexExpresiones regularesExpresiones regulares (PCRE2)

Cinco usos básicos

Encontrar archivos por el nombre

El ejemplo clásico es buscar cualquier archivo que tenga una palabra clave, por ejemplo linux.

  • Con find: find -name "*linux*"
  • Con fd: fd linux

Tienes que tener en cuenta que fd es Smart Case, esto quiere decir que si el patrón que pones a buscar es en minúsculas el lo realizará de forma Case Insensitive mientras si lo utilizas con mayúsculas entonces si que es Case Sensitive.

Por esta razón no tendrás los mismos resultados si utilizas fd linux que si utilizas fd Linux o incluso fd LINUX

Si quieres forzar cualquiera de los otros comportamientos puedes utilizar -s para Case Sensitive y -i para Case Insenstive.

En el 90% de los casos, al escribir rápido, solo tecleamos en minúsculas. *Smart Case garantiza que encuentres el archivo aunque no recuerdes si estaba en MiArchivo.txt o miarchivo.txt. Pero, si deliberadamente utilizamos una mayúscula, fd entiende que estás siendo preciso sobre la capitalización del nombre del archivo, y te da resultados más selectivos, como cuando buscas archivos de código con convenciones de nomenclatura específicas, por ejemplo, una clase como MiClase.java.

Buscar tipos de archivos

Si queremos buscar un archivo de tipo markdown y que contenga la palabra linux el comando es,

  • Con find: find -type f -name "*linux*.md
  • Con fd: fd -s -t f -e md linux

Buscar directorios

Si en lugar de archivos lo que queremos es buscar directorios, el comando es,

  • Con find: find -type d -iname "*linux*
  • Con fd: fd -t d linux

Buscar por un texto dentro de los archivos

Aquí lo que necesitamos hacer es una búsqueda recursiva de un texto en todo el árbol de directorios.

  • Con grep: grep -r Linux
  • Con ripgrep: rg Linux

Buscar por un texto Case Insensitive dentro de los archivos

Similar al caso anterior pero en este caso Case inssensitive.

  • Con grep: grep -ri Linux
  • Con ripgrep: rg -iLinux

Cinco trucos imprescindible

  • Buscar archivos de tipo markdown que contentan Linux en su interior. Esto es algo sencillo como utilizar rg -t md Linux
  • Buscar código en archivos Python es algo similar al anterior pero en este caso rg -t py "import md5". Si quieres saber todos los tipos tienes que utilizar rg --type-list.
  • Ejecutar comandos sobre los archivos encontrados. Por ejemplo si quieres borrar todos los archivos .bak que contengan la palabra linux lo puedes hacer con fd -s -t f -e py linux
  • Buscar por archivos con un nombre exacto. Por ejemplo si quieres buscar todos los archivos que se llamen README lo puedes hacer con fd '^README$'
  • Si quieres buscar todos los archivos que no contienen la cadena TODO lo puedes hacer con la opción -files-without-match. Por ejemplo rg --files-without-match TODO

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *