El comando find en Linux: buscar archivos y directorios

Introducción

El comando find es una de las herramientas más poderosas y versátiles que ofrece el shell de Linux para localizar archivos y directorios según diversos criterios. A diferencia de opciones más simples como ls o locate, find permite aplicar filtros de nombre, tipo, tamaño, fecha de modificación, permisos y mucho más, además de ejecutar acciones sobre los resultados encontrados.

Sintaxis básica

La forma general del comando es: find [ruta] [expresión]. La ruta indica el punto de partida de la búsqueda; si se omite, find asume el directorio actual. La expresión está compuesta por pruebas (test) y acciones (action) que se evalúan de izquierda a derecha. Por ejemplo, find /home -name ‘*.txt’ busca todos los archivos con extensión .txt dentro de /home y sus subdirectorios.

Buscar por nombre

Una de las pruebas más usadas es -name, que acepta un patrón con comodines shell como * y ?. Para hacer la búsqueda insensible a mayúsculas y minúsculas se utiliza -iname. Por ejemplo, find /var/log -iname ‘*error*’ localiza cualquier archivo que contenga la palabra error sin importar si está en mayúsculas o minúsculas.

Buscar por tipo

El test -type permite filtrar según el tipo de archivo. Los valores más comunes son f para archivos regulares, d para directorios, l para enlaces simbólicos, b para dispositivos de bloque y c para dispositivos de carácter. Un ejemplo típico es find /etc -type d -name ‘*.conf’ para encontrar directorios cuyo nombre termine en .conf, aunque normalmente los directorios no tienen extensión, este ejemplo muestra la combinación de pruebas.

Buscar por tamaño

Con -size se pueden localizar archivos cuyo tamaño cumpla una condición. El número puede ir seguido de sufijos: c (bytes), w (palabras de dos bytes), k (kilobytes), M (megabytes), G (gigabytes). El signo + indica mayor que, – indica menor que y sin signo indica exactamente ese tamaño. Por ejemplo, find /home -size +100M encuentra archivos mayores de 100 megabytes, mientras que find /tmp -size -10k localiza los que son menores de 10 kilobytes.

Buscar por fecha de modificación

Los tests -mtime, -atime y -ctime miden el tiempo en días desde la última modificación, acceso o cambio de estado, respectivamente. Usar -mtime -7 encuentra archivos modificados en los últimos siete días, -mtime +30 aquellos modificados hace más de treinta días. También se pueden usar -mmin y -amin para trabajar con minutos en lugar de días.

Usar operadores lógicos

Find permite combinar pruebas con los operadores AND (-a, implícito por defecto), OR (-o) y NOT (-not o !). Por ejemplo, find /opt -type f \( -name ‘*.log’ -o -name ‘*.bak’ \) -size +1M localiza archivos regulares que sean entweder .log o .bak y superen el megabyte. Los paréntesis deben escaparse o encerrarse en comillas para que el shell no los interprete.

Ejecutar acciones con -exec

Una de las características más útiles es la capacidad de lanzar un comando sobre cada resultado mediante -exec. La sintaxis es -exec comando {} \; donde {} se sustituye por la ruta del archivo encontrado y \; termina la instrucción. Por ejemplo, find . -name ‘*.tmp’ -exec rm {} \; elimina todos los archivos temporales en el directorio actual y sus subdirectorios. Si se prefiere confirmar antes de borrar, se puede usar -ok en lugar de -exec.

Ejemplos combinados

Supongamos que queremos localizar todos los archivos PDF mayores de 5 MB que hayan sido modificados en los últimos diez días y comprimirlos con gzip. El comando sería: find /documentos -type f -name ‘*.pdf’ -size +5M -mtime -10 -exec gzip {} \;. Otra situación común es buscar enlaces simbólicos rotos: find / -type l -! -exec test -e {} \; -print.

Consejos y trucos

Para evitar que find recorra sistemas de archivos que no deseamos, se puede usar -xdev para quedarse dentro del mismo sistema de archivos. Cuando la salida es larga, redirigirla a un archivo o paginarla con less mejora la legibilidad: find /usr -type f -name ‘*.conf’ 2>/dev/null | less. Además, combinar find con xargs permite procesar lotes de archivos de forma más eficiente: find . -type f -name ‘*.csv’ -print0 | xargs -0 wc -l.

Conclusión

Dominar el comando find brinda al administrador de sistemas y al usuario avanzado un control preciso sobre la localización y manipulación de archivos en Linux. Su flexibilidad permite desde búsquedas simples hasta scripts complejos que automatizan tareas de mantenimiento, auditoría y copia de seguridad. Practicar con los distintos tests y operadores es la mejor manera de incorporar esta herramienta al flujo de trabajo diario.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol