Linux: ¿cómo puedo utilizar find para buscar archivos por fecha?
Table of Contents
I. Presentación
En este tutorial, veremos cómo ordenar archivos por fecha utilizando el comando find en Linux.
Find es un comando nativo de los sistemas UNIX (forma parte del estándar POSIX). Es un comando muy útil cuando se utiliza mucho el terminal, ya que permite buscar archivos y carpetas en todo el sistema según diversos criterios.
Este comando tiene varias opciones de filtrado y búsqueda. Aquí nos centraremos en la búsqueda por fecha, que puede ser la fecha en que se modificó o accedió por última vez a un archivo o carpeta. Este tipo de búsqueda es particularmente útil cuando tienes un gran número de archivos (normalmente logs) o quieres investigar un periodo específico (antes o después de un evento).
II. Atributos avanzados de archivos y carpetas
En Linux, todos los archivos y carpetas tienen atributos. Algunos de ellos son bien conocidos, como el tipo (archivo, socket, carpeta, enlace simbólico, etc.), permisos (como rwxrwxr-x
), fecha de última modificación, propietario y grupo de propietarios. Estos atributos se muestran utilizando la opción -a
del comando ls
:

Pero hay otros atributos que suelen ser menos conocidos. Entre ellos se encuentran la fecha del último acceso y el número de inodo. Esta información se puede listar utilizando el comando stat
:

Ahora que sabemos que existen estos atributos de modificación y acceso, veremos cómo utilizarlos en un filtro utilizando el comando find
.
Más adelante veremos que el campo "creado" no es del todo fiable, o incluso inexistente en algunos sistemas de archivos. Por eso el comando find no ofrece una opción para filtrar por fecha de creación.
III. La sintaxis del comando find
Una búsqueda clásica utilizando el comando find
podría tener este aspecto:
find /home/mickael/ -type f -name *.txt
Este comando me permite buscar todos los archivos que terminan en .txt
en el directorio /home/mickael
. En cuanto a las opciones de filtrado temporal, podemos buscar archivos modificados o a los que se haya accedido después de un determinado número de días, antes de un determinado número de días y precisamente hace un determinado número de días. Esto se consigue utilizando las siguientes notaciones:
+N
más de N días-N
menos de N díasN
exactamente N días
Esto será más fácil de entender con la información que sigue.
A. Búsqueda de archivos por fecha de modificación
También podemos buscar por la fecha en que un archivo fue modificado por última vez. Esto es especialmente útil para averiguar si una configuración ha sido modificada recientemente, y puede utilizarse para comprobar la integridad de un fichero. Utilizaremos la opción -mtime
, por ejemplo, para mostrar los archivos modificados hace más de 30 días (1 mes):
# Mostrar archivos .txt creados hace más de 30 días
$ find /home/mickael -type f -name "*.txt" -mtime +30
Por el contrario, si estoy interesado en archivos creados hace menos de un mes :
# Mostrar archivos .txt creados hace más de 30 días
$ find /home/mickael -type f -name "*.txt" -mtime -30
Observe la diferencia entre +30
y -30
. La opción mtime
, para "tiempo de modificación", sólo muestra los archivos cuya última modificación se produjo hace más o menos del número de días dado.
B. Búsqueda de archivos por fecha de acceso
También podemos utilizar un filtro basado en la fecha de último acceso de un archivo utilizando la opción -atime
:
# Mostrar archivos .txt creados hace más de 1 día
$ find /home/mickael -type f -name "*.txt" -atime +1
Por el contrario, si son archivos creados hace menos de un día los que me interesan :
# Mostrar archivos .txt creados hace más de 1 día
$ find /home/mickael -type f -name "*.txt" -atime -1
La opción atime
para "tiempo de acceso" se utiliza para mostrar sólo los archivos cuyo último acceso (lectura) es anterior o inferior al número de días dado.
Por supuesto, todos estos comandos también se aplican a las carpetas. En este caso, sustituya -type f por -type d.
C. Filtrar por minutos en lugar de por horas
En mi último ejemplo, utilizamos el valor mínimo posible para las opciones atime
y mtime
, es decir, 1 día. Sin embargo, a veces puede ser útil filtrar en escalas de tiempo más pequeñas, como minutos.
El comando find
contiene opciones para hacerlo. En realidad son las mismas que las vistas anteriormente, salvo que la palabra time
debe sustituirse por min
:
- Utilice
amin
en lugar deatime
para filtrar por fecha de último acceso en minutos. - Utilice
mmin
en lugar demtime
para filtrar por fecha de última modificación en minutos.
He aquí algunos ejemplos:
# Mostrar archivos .txt modificados hace menos de 30 minutos
find /home/mickael -type f -name "*.txt" -mmin -30
# Mostrar los archivos .txt a los que se ha accedido hace más de 30 minutos
find /home/mickael -type f -name "*.txt" -amin +30
Por lo tanto, las dos únicas escalas de tiempo que se pueden utilizar con find
son el minuto (mmin
, amin
) y el día (mtime
, atime
), que suele ser suficiente.
¿Y la fecha de creación?
La documentación y la ayuda del comando find
también ofrecen las opciones -ctime
y <-cmin
. Podrías pensar que la "c" aquí significa "creación", pero no es así. Estas opciones se refieren a cambios de estado (o metadatos) y no a la creación de archivos. Para los sistemas de archivos Linux comunes, la fecha de creación no siempre está disponible o es fiable, por lo que no hay opciones en find
para filtrarla.
He aquí un ejemplo:

Aquí, mi archivo document2.txt
se creó el 2025-03-04 a las 21:01:39 como indica el comando stat
. Modifico el contenido de este archivo el 2025-03-04 a las 21:23:03, y vuelvo a comprobar los atributos avanzados con stat
. Se ha modificado la fecha de modificación, no la fecha de creación (que es lo normal). A continuación, uso el comando find
con la opción -cmin
para filtrar los archivos cuyo estado ha cambiado hace más de tres minutos, y mi document2.txt
no aparece.
Si la opción -cmin
fuera válida para la creación (que no es el caso), mi document2.txt
debería haber aparecido, ya que se creó hace más de tres minutos. Este es un escollo a tener en cuenta si quieres usar el comando find
de forma efectiva.
Más concretamente, esto también permite identificar los cambios en los permisos de un fichero. Al cambiar los permisos, el propietario o el grupo de un fichero no cambia la fecha de la última modificación o acceso, sino la fecha del cambio. Esto puede ser útil en varios contextos.
IV. Búsqueda por hora
Si se conoce la hora y la fecha exactas que interesan, o incluso el intervalo de tiempo, se puede utilizar como filtro de búsqueda. Si la búsqueda debe realizarse en un momento concreto, podemos utilizar -newerXt
con una fecha y hora. Aquí el X
puede ser un a
(acceso), un m
(modificación) o un c
(cambio) :
# Mostrar archivos con metadatos modificados después del 03/03/2025
find ./ -newerct "2025-03-03"
# Mostrar ficheros modificados antes del 03/03/2025 (búsqueda inversa con !)
find ./ ! -newermt "2025-03-03"
# Mostrar los archivos a los que se ha accedido después de las 21:00 del 03/03/2025
find ./ -newerat "2025-03-03 21:00:00"
Las opciones aquí son muy similares, pero ten en cuenta las sutiles diferencias que diferencian entre cambios de metadatos, modificaciones y acceso (fin de la opción como at
, ct
o mt
).
Como puede ver en estos ejemplos, también es posible realizar una búsqueda inversa o de exclusión (búsqueda de archivos anteriores a una fecha especificada) utilizando el carácter !
. También podemos especificar la hora, el minuto y el segundo en nuestro filtro para ser mucho más precisos.
V. Conclusión
Todas estas opciones hacen del comando find
una herramienta muy potente. Conocerlas y dominarlas significa que en muchos casos no necesitas hacer scripts ni instalar herramientas de terceros. Las opciones de filtrado de tiempo que acabamos de ver pueden utilizarse, por supuesto, en combinación con las demás opciones del comando find
, por ejemplo :
# Busca archivos terminados en ".log", modificados hace menos de 7 días y de más de 1 MB en el directorio /var/log.
find /var/log -type f -name "*.log" -mtime -7 -size +1M
Por último, es importante tener en cuenta que los atributos avanzados de los archivos pueden modificarse manualmente, lo que significa que no siempre son fiables al 100%. Esta es una consideración importante en el ámbito de la ciberseguridad, donde la manipulación de estos atributos puede utilizarse para ocultar actividades maliciosas.
Te recomiendo que eches un vistazo a las opciones avanzadas de find
¡además de lo que acabamos de ver! Siéntase libre de compartir sus pensamientos sobre este tutorial en los comentarios en nuestro servidor Discord.