Linux / Comando find: buscar archivos y directorios por condiciones

find es un comando que recorre directamente la ruta de inicio especificada para encontrar archivos y directorios que cumplan con ciertas condiciones. No solo por nombre, sino también se pueden combinar tipo, tamaño, fecha de modificación y permisos, y ejecutar un comando sobre los resultados.

En este artículo se explica la sintaxis básica de find, sus principales opciones, ejemplos de uso real, diferencias con comandos relacionados y precauciones al usarlo.

¿Qué es el comando find?

La sintaxis coloca primero las rutas iniciales y después la expresión, formada por pruebas, operadores y acciones. La evaluación respeta la precedencia de los operadores y puede detenerse cuando el resultado ya está decidido. Si no se indica una acción que suprima la impresión predeterminada, se aplica -print. La lista de comandos de uso frecuente en Linux ayuda a comparar esta búsqueda con otras herramientas.

Sintaxis básica

find [RUTA_INICIAL ...] [EXPRESIÓN]

Las opciones y el comportamiento detallado pueden variar según la implementación y la versión. En el sistema actual, consulte la descripción de los comandos instalados como find --help y man find.

Uso básico de find

Buscar por nombre

Se colocan comillas alrededor del patrón para que Shell no expanda primero los caracteres comodín.

find . -name '*.log'

Buscar por tipo y tamaño

-type f se refiere a un archivo normal, -size +100M se refiere a un archivo que es mayor a 100 MiB.

find /var -type f -size +100M

Buscar por hora de modificación

-mtime cuenta períodos completos de 24 horas desde la modificación, descartando la fracción. Así, -mtime 0 corresponde a menos de 24 horas y -mtime 1 al intervalo entre 24 y 48 horas. Para una escala de minutos, utilice -mmin.

find /srv/app -type f -mmin -60

Verificar el rango de búsqueda y la ruta de resultados

find explora realmente bajo el directorio inicial especificado. Coloque el patrón entre comillas para que el shell no lo expanda primero.

mkdir -p demo-find
touch demo-find/a.txt
find demo-find -name '*.txt'

Ejemplo de salida:

demo-find/a.txt

La salida predeterminada muestra la ruta incluyendo el camino inicial. Antes de combinar con -delete o -exec, verifique primero si los resultados de la consulta incluyen solo los archivos deseados.

Opciones principales

Opciones Descripción
-name PATTERN Verifica el patrón del nombre de archivo distinguiendo entre mayúsculas y minúsculas.
-iname PATTERN Verifica el patrón del nombre de archivo sin distinguir entre mayúsculas y minúsculas.
-type TYPE Restringe el tipo de archivo, como f, d, l, etc.
-maxdepth N Limita la profundidad máxima de búsqueda desde el punto de inicio.
-mtime N Comprueba la hora de modificación en unidades de 24 horas.
-size N Aplica condiciones de tamaño de archivo.
-exec ... {} + Recoge las rutas coincidentes y las pasa de forma segura como argumentos a un comando externo.
-delete Elimina las coincidencias. Se deben verificar adecuadamente las condiciones y el orden.

Ejemplos de uso práctico

Búsqueda de directorios y archivos vacíos

-empty puede coincidir tanto con archivos ordinarios vacíos como con directorios vacíos, por lo que se debe especificar el tipo conjuntamente.

find . -type d -empty -print

Procesamiento por lotes de archivos coincidentes

Se utiliza -exec ... {} + para que sea seguro incluso si hay espacios o saltos de línea en el nombre del archivo.

find . -type f -name '*.tmp' -exec ls -l -- {} +

Revisar el objetivo antes de eliminar

Primero consulte los resultados con -print. El ejemplo presupone que ./cache existe y que ha confirmado su ruta; -mtime +30 selecciona archivos con al menos 31 períodos completos de 24 horas. Ejecute la segunda línea solo si desea eliminar exactamente esas coincidencias.

find ./cache -type f -mtime +30 -print
find ./cache -type f -mtime +30 -delete

Comparación con comandos relacionados con find

Comando Rol principal Situaciones adecuadas
find Recorrido de rutas en tiempo real Condiciones y acciones precisas
locate Búsqueda en la base de datos de índices Búsqueda rápida por nombre
which Buscar archivos ejecutables en PATH Verificar comandos externos que se ejecutarán
grep -R Buscar contenido del archivo Buscar patrones de texto

Precauciones al usar

Los patrones se encierran entre comillas

Usar tal cual *.log puede causar que la shell actual expanda primero y se obtenga una búsqueda diferente a la esperada.

-delete elimina inmediatamente

Verifique las rutas y condiciones antes de eliminar. En GNU find, -delete activa el recorrido en profundidad -depth; no lo combine sin revisar con -prune. Tenga en cuenta los enlaces simbólicos y los límites de los sistemas de archivos.

Verifique la prioridad de los operadores

La conjunción implícita tiene mayor precedencia que -o. Agrupe las alternativas con paréntesis protegidos del intérprete de órdenes, por ejemplo \( ... \), para que la condición se aplique al conjunto previsto.

FAQ

¿Se busca automáticamente en los subdirectorios?

Sí. Por defecto, recorre de manera recursiva bajo la ruta de inicio.

¿Cómo ignorar mayúsculas y minúsculas en los nombres de archivo?

En GNU find se usa -iname.

¿Cómo manejar de manera segura archivos con espacios?

Utilice -exec COMANDO {} + para pasar las rutas como argumentos, o combine -print0 con una herramienta que acepte separadores NUL. Esto evita dividir los nombres por espacios o saltos de línea.

¿Por qué es más lento que locate?

find recorre directamente el sistema de archivos actual, pero locate consulta un índice previamente creado.

Documentación oficial