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 entrada está disponible también en ENGLISH.

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