GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué Find -mtime +1 solo devuelve archivos de más de 2 días?

Me cuesta entender por qué el find interpreta los tiempos de modificación de archivos de la forma en que lo hace. Específicamente, no entiendo por qué -mtime +1 no muestra archivos con menos de 48 horas de antigüedad.

Como prueba de ejemplo, creé tres archivos de prueba con diferentes fechas de modificación:

[[email protected]obox findtest]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 25 08:44 foo1
-rw-r--r-- 1 root root 0 Sep 24 08:14 foo2
-rw-r--r-- 1 root root 0 Sep 23 08:14 foo3

Luego ejecuté find con -mtime +1 switch y obtuve el siguiente resultado:

[[email protected] findtest]# find -mtime +1
./foo3

Luego ejecuté find con -mmin +1440 y obtuve el siguiente resultado:

[[email protected] findtest]# find -mmin +1440
./foo3
./foo2

Según la página del manual para encontrar, entiendo que este es el comportamiento esperado:

 -mtime n
        File’s  data was last modified n*24 hours ago.  See the comments
        for -atime to understand how rounding affects the interpretation
        of file modification times.


-atime n
       File  was  last  accessed n*24 hours ago.  When find figures out
       how many 24-hour periods ago the file  was  last  accessed,  any
       fractional part is ignored, so to match -atime +1, a file has to
       have been accessed at least two days ago.

Sin embargo, esto todavía no tiene sentido para mí. Entonces, si un archivo tiene 1 día, 23 horas, 59 minutos y 59 segundos de antigüedad, find -mtime +1 ignora todo eso y simplemente lo trata como si tuviera 1 día, 0 horas, 0 minutos y 0 segundos? En cuyo caso, ¿técnicamente no tiene más de 1 día y se ignora?

No… no… calcula.

Respuesta aceptada:

Bueno, la respuesta simple es, supongo, que su implementación de búsqueda sigue el estándar POSIX/SuS, que dice que debe comportarse de esta manera. Citando de SUSv4/IEEE Std 1003.1, edición de 2013, "buscar":

-mtime n
     El primario se evaluará como verdadero si el tiempo de modificación del archivo restado
     del tiempo de inicialización, dividido por 86400 (con cualquier resto descartado), es n.

(En otra parte de ese documento se explica que n en realidad puede ser +n , y el significado de eso como "mayor que").

En cuanto a por qué el estándar dice que se comportará de esa manera, bueno, supongo que en el pasado un programador fue perezoso o no pensó en ello, y simplemente escribió el código C (current_time - file_time) / 86400 . La aritmética de enteros C descarta el resto. Los scripts comenzaron dependiendo de ese comportamiento y, por lo tanto, se estandarizó.

Relacionado:adopción -Buscar significado- ¡Búsqueda en el diccionario!

El comportamiento especificado también sería portátil a un sistema hipotético que solo almacenó una fecha de modificación (no la hora). No sé si tal sistema ha existido.


Linux
  1. ¿Cómo eliminar todos los archivos anteriores a X número de días en Linux?

  2. Cómo eliminar archivos de más de N días usando tmpreaper en Linux

  3. calcule el espacio total en disco utilizado por archivos de más de 180 días usando find

  4. Cómo crear archivos tar para archivos de más de 7 días usando secuencias de comandos de shell de Linux

  5. Encuentra todos los archivos de más de un minuto

Cómo eliminar archivos anteriores a los días especificados en Linux

Script Bash para eliminar archivos de más de x días con subdirectorios

¿Encontrar directorios con todos los archivos dentro de más de X?

¿Por qué Linux usa una partición de intercambio en lugar de un archivo?

Búsqueda de archivos de más de x días en un sistema con un cuadro ocupado simplificado

Linux:uso de buscar para localizar archivos anteriores a <fecha>