find permite recorrer un árbol de directorios y seleccionar archivos según criterios como el nombre, el tipo o la fecha. Esta guía reúne patrones prácticos para búsquedas habituales y explica cómo comprobar los resultados antes de ejecutar acciones que los modifiquen.
Consejo: empieza mostrando los resultados con
-deletesolo después de confirmar que la búsqueda selecciona exactamente lo esperado.
Sintaxis básica
La forma general es:
find RUTA [CRITERIOS] [ACCIONES]
Por ejemplo, para listar el contenido bajo /var/log:
find /var/log -print
Si no se indica una acción, GNU find imprime cada ruta encontrada. Los patrones de -name y -iname se aplican al nombre base, no a la ruta completa; protege los comodines entre comillas para que los expanda find y no la shell [1].
Buscar por nombre y tipo
Buscar directorios llamados video, sin distinguir mayúsculas y minúsculas:
find /srv/media -type d -iname 'video' -print
Buscar archivos cuyo nombre termine en .log:
find /var/log -type f -name '*.log' -print
Los tipos más usados son:
| Opción | Elemento seleccionado |
|---|---|
-type f | Archivo regular |
-type d | Directorio |
-type l | Enlace simbólico |
Combina criterios para acotar la búsqueda. Por ejemplo, localizar archivos .log dentro de /var/log cuyo nombre contenga error:
find /var/log -type f -name '*error*.log' -print
Usar find en macOS
macOS también incluye find en Terminal. Los ejemplos básicos de esta guía —-type, -name, -iname, -mtime, -ctime, -empty y -delete— están disponibles en la implementación BSD documentada para macOS [5]. Aun así, GNU find y BSD find no ofrecen exactamente el mismo conjunto de opciones: consulta man find en el equipo donde vayas a ejecutar un comando, sobre todo si copias opciones avanzadas de una guía para Linux.
Buscar por antigüedad
GNU find ofrece pruebas por días (-mtime, -ctime, -atime) y por minutos (-mmin, -cmin, -amin). -mtime mide desde la última modificación del contenido; -ctime, desde el último cambio de estado del archivo —por ejemplo, permisos o propietario—, y no su fecha de creación [2].
Listar archivos modificados hace más de 14 periodos completos de 24 horas:
find /srv/media -type f -mtime +14 -print
Listar archivos cuyo estado cambió hace menos de 24 horas:
find /srv/media -type f -ctime 0 -print
Los valores se redondean hacia abajo en periodos completos: -mtime 0 significa menos de 24 horas, -mtime 1 entre 24 y 48 horas, y así sucesivamente. Por eso +14 no equivale exactamente a “más de 14 días desde la medianoche”; selecciona archivos cuyo contador de periodos completos supera 14 [2].
Encontrar directorios vacíos
Para listar directorios vacíos:
find /srv/media -type d -empty -print
-empty también puede seleccionar archivos vacíos. Añadir -type d limita el resultado a directorios [3].
Eliminar resultados con precaución
Primero ejecuta la búsqueda sin acciones destructivas y revisa la lista. Cuando confirmes el resultado, puedes borrar archivos regulares con más de 30 periodos completos de 24 horas:
find /srv/descargas -type f -mtime +30 -delete
Para borrar directorios vacíos encontrados bajo una ruta:
find /srv/media -mindepth 1 -type d -empty -delete
-mindepth 1 evita incluir la propia ruta inicial. La acción -delete implica recorrer el árbol en profundidad, por lo que no debe combinarse con -prune para excluir subdirectorios: esa combinación puede no hacer lo que se espera [4]. Comprueba la ruta y los criterios antes de borrar; -delete no envía elementos a una papelera.
Medir el tiempo de un recorrido
Para medir cuánto tarda find en recorrer un árbol sin imprimir cada ruta en pantalla:
time find /srv/media -type f -print >/dev/null
El tiempo dependerá del número de entradas, el almacenamiento, la caché del sistema y los puntos de montaje que haya que recorrer.
En resumen
- Combina la ruta inicial con
-type,-nameo-inamepara reducir los resultados. - Distingue la modificación del contenido (
-mtime) del cambio de metadatos (-ctime). - Comprueba siempre la salida antes de añadir
-delete. - Ten presente que el comportamiento y la disponibilidad de algunas opciones pueden variar entre GNU
findy otras implementaciones.
📚 Fuentes consultadas
- GNU Findutils: patrones de nombre base (
-namey-iname) - GNU Findutils: fechas y rangos de antigüedad
- GNU Findutils: pruebas por tamaño y archivos vacíos
- GNU Findutils: acción
-delete - Manual de
findpara macOS 10.13 (implementación BSD)