Buscar archivos y directorios en Linux y macOS con find

·4 min de lectura·

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 -print. Añade una acción como -delete solo 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ónElemento seleccionado
-type fArchivo regular
-type dDirectorio
-type lEnlace 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, -name o -iname para 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 find y otras implementaciones.

📚 Fuentes consultadas

  1. GNU Findutils: patrones de nombre base (-name y -iname)
  2. GNU Findutils: fechas y rangos de antigüedad
  3. GNU Findutils: pruebas por tamaño y archivos vacíos
  4. GNU Findutils: acción -delete
  5. Manual de find para macOS 10.13 (implementación BSD)

find

¿Te ha resultado útil?

Compártelo con tu red de contactos profesionales.

Comentarios (0)

Sé el primero en comentar.