GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué find -mtime no funciona como se esperaba en archivos con diferentes zonas horarias?

Solución 1:

Es posible que el problema de la zona horaria sea una pista falsa.

find . -mtime 7

debe encontrar archivos que tengan exactamente siete días de antigüedad ("siete" significa entre 7.000 y 7.999 días, más o menos, y "antiguo" significa "desde la última modificación"). Si desea archivos que tengan más de siete días de antigüedad, lo que a juzgar por la fecha de su primer archivo (junio de 2010), intente

find . -mtime +7

Estoy de acuerdo contigo en que la zona horaria aparente es extraña, pero creo que es explicable. man stat Está claro que se almacena un time_t, como dice Sean R a continuación. Qué ls está mostrando eso como una hora local, y está teniendo la amabilidad de tener en cuenta las convenciones locales de horario de verano cuando lo hace.

Mi sistema es el mismo:los tiempos de archivo que caen en marzo-octubre se muestran con una zona horaria +0100 mientras que los que caen en octubre-marzo se muestran con una zona horaria +0000, no porque esto esté almacenado en el sistema de archivos, pero porque el archivo de zona horaria le dice a mi sistema que en junio, cuando toqué el archivo, lo habría hecho a una hora que pensé que eran las 8 am, no serían las 7 am si fuera invierno. ls es lo suficientemente amable, cuando muestra horas que resultan ser en verano, para mostrarlas como habrían aparecido en verano, eso es todo.

Si puede encontrar cualquier zona horaria en su ls resultados que no son ni de verano ni de invierno de acuerdo con su convención local, entonces estoy equivocado, pero no puedo encontrar ninguno en mi sistema.

Solución 2:

Con find, -mtime funciona en períodos de 24 horas, por lo que

-mtime 0 or -mtime -1 mean today
-mtime 3 would mean 3 days old
-mtime +1 means greater than one day old 
-mtime -7 means less than 7 days old

Solución 3:

Para explicar un poco más la parte de la zona horaria (la discusión "mtime" se maneja con otros comentarios)...

La fecha y la hora se almacenan en los archivos como segundos desde la medianoche del 1 de enero de 1970, UTC. Lo que significa que no hay una zona horaria asociada con ellos. Luego, los programas usan la configuración de zona horaria del sistema en /etc/timezone , a menos que la variable de entorno "TZ" la anule, para mostrar esa hora en la zona horaria local:

chats:/tmp$ touch foo
chats:/tmp$ ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 06:14 foo
chats:/tmp$ TZ=GMT ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 13:14 foo
chats:/tmp$

Tenga en cuenta que en la última línea se muestra la 1:14 p. La diferencia es el segundo "ls" que configuro la variable de entorno TZ en GMT.

Es posible que desee utilizar "stat" para examinar también todas las horas/fechas asociadas con los archivos.


Linux
  1. ¿Por qué la expresión regular funciona en X pero no en Y?

  2. ¿Por qué la sustitución del proceso Bash no funciona con algunos comandos?

  3. ¿La asignación de metadatos con Avconv no funciona?

  4. ¿El comando Rm en Bash Script no funciona con variables?

  5. ¿Por qué Tomcat funciona con el puerto 8080 pero no con el 80?

Encuentra archivos perdidos con Scalpel

¿Por qué git falla al empujar/buscar con demasiados archivos abiertos?

¿Por qué Windows no reconoce los archivos dentro de las particiones de Linux?

¿Por qué esta expresión regular no funciona en Linux?

Ctrl-C no funciona con la sesión no separada de pppd

La repetición automática no funciona