Búsqueda de archivos en Linux

Introducción

Buscar archivos en Linux puede ser una tarea común, pero también puede volverse compleja si no conocemos los comandos adecuados. Afortunadamente, la terminal de Linux nos ofrece herramientas potentes y flexibles para realizar búsquedas rápidas y eficientes. En este post, veremos cómo buscar archivos por su nombre y cómo encontrar contenido dentro de los archivos utilizando los comandos find y grep.

1. Búsqueda de archivos por nombre con find

Para encontrar un archivo específico en Linux, el comando más usado es find. Este comando permite realizar búsquedas en un directorio y sus subdirectorios de forma recursiva. Veamos cómo usarlo:

Ejemplo básico:

Para buscar un archivo con un nombre exacto, puedes usar el siguiente comando:

find /ruta/de/busqueda -name "nombre_del_archivo"
  • /ruta/de/busqueda: Aquí defines dónde empezar la búsqueda. Puede ser una ruta específica o el directorio actual (.).
  • nombre_del_archivo: El nombre exacto del archivo que buscas.

Por ejemplo, si estás buscando un archivo llamado archivo.txt en el directorio actual:

find . -name "archivo.txt"

Búsqueda sin distinguir mayúsculas y minúsculas

Si quieres que la búsqueda no distinga entre mayúsculas y minúsculas, usa la opción -iname:

find . -iname "archivo.txt"

Esto buscará archivos como archivo.txt, Archivo.txt o incluso ARCHIVO.TXT.

Búsqueda de archivos que contienen un string en el nombre

Si no conoces el nombre exacto del archivo pero sabes que contiene cierto string, puedes usar comodines (*) para hacer la búsqueda más flexible. Por ejemplo, para buscar archivos que contengan la palabra reporte en su nombre:

find . -name "*reporte*"

Este comando encontrará archivos como reporte.txt, mi_reporte_final.pdf, o nuevo_reporte_2024.doc.

Búsqueda ignorando mayúsculas y minúsculas:

find . -iname "*reporte*"

Esto no solo encontrará archivos con la palabra reporte, sino también variaciones como Reporte.txt o REPORTE.doc.

3. Búsqueda de contenido dentro de archivos con grep

A veces no estamos buscando un archivo en particular, sino archivos que contienen un string específico en su contenido. Para esto, el comando grep es ideal.

Búsqueda recursiva en el contenido de los archivos:

Para buscar un string dentro de todos los archivos en un directorio y sus subdirectorios, usa la opción -r de grep:

grep -r "cadena_de_texto" /ruta/de/busqueda

Por ejemplo, si quieres buscar la palabra "error" en todos los archivos del directorio actual:

grep -r "error" .

Esto te mostrará todas las coincidencias del string "error" en los archivos de esa carpeta.

Usar find junto con grep para búsquedas avanzadas:

Si quieres buscar en archivos específicos (por ejemplo, solo archivos .log), puedes combinar find y grep:

find . -name "*.log" -type f -exec grep -H "error" {} \;

Este comando busca en todos los archivos .log y muestra aquellos que contienen la palabra "error". La opción -H en grep hace que el resultado incluya el nombre del archivo donde se encuentra el string.

Ver el número de línea donde aparece el string:

Para mostrar el número de línea donde aparece la coincidencia, agrega la opción -n a grep:

grep -rn "cadena_de_texto" /ruta/de/busqueda

Esto es muy útil cuando estás buscando un error específico o un mensaje de log y quieres saber exactamente en qué parte del archivo aparece.

Conclusión

Ya sea que necesites encontrar un archivo específico o un string en el contenido de varios archivos, Linux ofrece herramientas versátiles como find y grep que te permiten realizar búsquedas de forma eficiente. Con los ejemplos que vimos hoy, estarás listo para navegar y buscar archivos en tu sistema de una manera más rápida y precisa.

Crear funciones de bash custom en Ubuntu 20.04 LTS

Bash

Algunas veces nos encontramos trabajando con la terminal y ejecutando incontables veces la misma secuencia de comandos cambiando solo uno o algunos pocos parámetros entre secuencia y secuencia. O simplemente, necesitamos simplificar algunas operaciones básicas sin ejecutar comandos kilométricos. Para este tipo de situaciones, una buena práctica puede ser utilizar funciones de bash customizadas, es decir creadas por nosotros para nuestras necesidades específicas.

En este artículo exploraremos como declarar una función (sencilla) de bash y hacer que la misma esté disponible como un comando más en nuestra terminal.

Lo primero que debemos hacer es crear un archivo donde declararemos nuestra función. Para eso, con nuestro editor de texto favoríto crearemos un archivo llamado .custom_functions.sh en el home de nuestro usuario. Noten que lo iniciamos con . (punto) para mantenerlo como un archivo oculto del sistema y minimizar la posibilidad de eliminarlo por error.

Al comienzo del archivo agregamos la siguiente linea:

#!/bin/bash

Luego, para este ejemplo puntual crearemos una función sencilla, que toma un valor ingresado como parámetro y lo muestra por pantalla, por lo que necesitaremos agregar el siguiente código al mismo archivo:

function printsaludo(){
	echo "Hola $1"
}

Guardamos los cambios y para probarlo ejecutamos en la terminal el comando source .custom_functions.sh una vez hecho esto podremos usar la función printsaludo como un comando más de bash. Si escribimos printsaludo Juan por ejemplo esto imprimirá la cadena Hola Juan

Ahora bien, si reiniciamos nuestro equipo y queremos volver a usar el comando notaremos que no está disponible y para que funcione nuevamente tenemos que ejecutar source .custom_functions.sh una vez más. Para evitar ejecutar esto cada vez que reiniciamos nuestro equipo, necesitamos editar el archivo .bashrc que se encuentra en home nuestro usuario y agregar las siguientes lineas al final:

# Custom commands
source /home/my_user/.custom_scripts.sh

Donde dice my_user deberás poner el nombre de la cuenta de usuario de linux que estas utilizando. Una vez hecho esto salvas el archivo y ya tienes tu función seteada para utilizar en todo momento.

Obviamente la idea es que puedas generar funciones más complejas que faciliten tus tareas diarias y/o procesos que impliquen la ejecución de varias secuencias de comando.

Espero que este artículo les haya sido de ayuda.