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.




