User Tools

Site Tools


utilizar_fechas_y_rangos_de_fechas_en_find

Guía rápida para buscar ficheros y directorios con find usando fechas

Depende de como se interactúe con los ficheros, estos mostrarán más o menos cambios en sus timestamps. Por ejemplo, al crear un o editar un fichero en Linux usando un editor Vim, los tiempos de acceso, modificación, cambios y creación son los mismos (a diferencias de pocos milisegundos). Todo depende de qué llamadas al sistema se realicen en relación con los ficheros.

  • Tiempos de acceso: mknod(2), utimes(2) y read(2)
  • Tiempos de mofidicación: mknod(2), utimes(2) y write(2)
  • Tiempos de cambio: chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2) y write(2)

Si por el contrario se redirige la salida de un comando al fichero, únicamente cambiarán los campos de modificación y cambio. Si solo se cambian los permisos o renombra, cambiará el timestamp change, es decir, cambios.

Es común que los tiempos de modificación y cambios sean en muchos casos iguales, eso se debe a que muchas modificaciones sobre un fichero representan a su vez cambios en los metadatos. Se explica por si solo al ver que todas las llamadas al sistema que generan cambios en “modify” afectan también a “change”. Se pueden encontrar diferencias entre modificación y cambio si por ejemplo usamos touch, que soporta el cambio de fecha de modificación de un fichero sin interferir en los demás. Pero hay que tener en cuenta, que el momento de cambiar dicha fecha de modificación, la fecha de “cambio” será la del momento de dicha ejecución del comando (ya que los metadatos han cambiado). Si por ejemplo se cambian los permisos o renombra el fichero, la fecha de modificación se mantendrá ya que la llamada al sistema chmod no afecta a los tiempos de modificación.

Búsquedas por fecha en base a modificaciones de permisos o creación de archivos, último acceso y modificación.

### Tipos de timestamps de ficheros.
 
# a   Acceso.
# B   Birth time (Creación).
# c   Cambio en los metadata (permisos, renombre, etc).
# m   Modificación del contenido del fichero. No debe confundirse con "change".
 
### Fechas y rangos de fechas.
 
# Ficheros y directorios modificados el día 2017-03-11.
find / -newermt 2017-03-11 ! -newermt 2017-03-12
 
# Ficheros accedidos entre 2017-03-11 y 2017-03-17.
find / -type f -newerat 2017-03-11 ! -newerat 2017-03-18
 
# Directorios con el timestamp de cambio (NO modificación) accedidos entre 2017-03-11 y 2017-03-17.
find / -type d -newerct 2017-03-11 ! -newerct 2017-03-18 
 
 
### Usando fechas de Ficheros.
 
# Ficheros y directorios modificados entre las fechas de dos ficheros.
find / -newer /tmp/t1 ! -newer /tmp/t2 
 
# Fichero y directorios accedidos entre las fechas de dos ficheros.
find / -anewer /tmp/t1 ! -anewer /tmp/t2 
 
# Fichero y directorios que han recibido cambios (change) entre las fechas de esos dos ficheros.
find / -cnewer /tmp/t1 ! -cnewer /tmp/t2 
 
 
### Número de Días.
 
# Buscar ficheros modificados en las últimas 24 horas (1 día).
find / -mtime 1 -print
 
# Modificado exactamente hace 25 días
find -mtime 15
 
# Accedido hace menos de 15 días.
find -atime -15
 
# Creado / con metadatos modificados (permisos o nombres de fichero) hace más de 15 días.
find -ctime +15
 
 
# NOTA: "!" equivale a las opciones "-and -not".
# Leer el manual para búsquedas más sofisticadas.
 
################### 
 
## Mostrar ordenadamente los ficheros accedidos / modificados / creados de más actual a más antiguo incluyendo subdirectorios.
## Se buscará únicamente ficheros (-type f) dentro de "/mnt/" pero evitando "/mnt/codigo" y "/mnt/pelis".
 
# Buscar el ultimo fichero accedido dentro de un directorio.
find /mnt -type f ! -path "/mnt/codigo/*" ! -path "/mnt/pelis/*" -printf "%A@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1 
 
# Buscar fichero con la fecha de creación más reciente dentro de un directorio.
find /mnt -type f ! -path "/mnt/codigo/*" ! -path "/mnt/pelis/*" -printf "%C@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1 
 
# Buscar el fichero con la fecha de modificación más reciente en un directorio.
find /mnt -type f ! -path "/mnt/codigo/*" ! -path "/mnt/pelis/*" -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1 

Comando stat para consultar fechas de creación, acceso y modificación de ficheros y directorios.

stat # Muestra los tres tipos de fecha.
stat -c%x fichero # Muestra la fecha y hora del último acceso.
stat -c%y fichero # Muestra la fecha y hora de la última modificación.
stat -c%z fichero # Muestra la fecha y hora del último cambio. 

Lectura recomendada (Sellos de tiempo en ficheros / directorios): comando_stat_access_modify_change

utilizar_fechas_y_rangos_de_fechas_en_find.txt · Last modified: 2021/08/31 11:00 by busindre