Soluzione 1:
È possibile che il problema del fuso orario sia una falsa pista.
find . -mtime 7
dovrebbe trovare file che hanno esattamente sette giorni ("sette" significa tra 7.000 e 7.999 giorni, più o meno, e "vecchio" significa "dall'ultima modifica"). Se vuoi file che hanno più di sette giorni, cosa che a giudicare dalla data del tuo primo file (giugno 2010), prova
find . -mtime +7
Sono d'accordo con te sul fatto che l'apparente fuso orario sia strano, ma penso che sia spiegabile. man stat
è chiaro che un time_t è memorizzato, come dice Sean R sotto. Cosa ls
sta facendo è visualizzarla come ora locale, ed è così gentile da tenere conto delle convenzioni locali sull'ora legale quando lo fa.
Il mio sistema è lo stesso:gli orari dei file che cadono in marzo-ottobre sono mostrati con un fuso orario +0100 mentre quelli che cadono in ottobre-marzo sono mostrati con un fuso orario +0000, non perché questo sia memorizzato nel file system, ma perché il file del fuso orario dice al mio sistema che a giugno, quando ho toccato il file, l'avrei fatto a un'ora che pensavo fossero le 8 del mattino, non sarebbero le 7 del mattino se fosse stato inverno. ls
è così gentile, quando si visualizzano orari che si verificano in estate, da mostrarli come sarebbero apparsi in estate, tutto qui.
Se riesci a trovare eventuali fusi orari nel tuo ls
output che non sono né estivi né invernali secondo la tua convenzione locale, allora mi sbaglio, ma non riesco a trovarne nessuno sul mio sistema.
Soluzione 2:
Con find, -mtime funziona in periodi di 24 ore quindi
-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
Soluzione 3:
Per spiegare un po' di più la parte relativa al fuso orario (la discussione "mtime" è gestita da altri commenti)...
La data e l'ora vengono memorizzate nei file come secondi dalla mezzanotte del 1 gennaio 1970, UTC. Significa che non esiste un fuso orario associato a loro. I programmi utilizzano quindi l'impostazione del fuso orario del sistema in /etc/timezone
, a meno che non sia sovrascritto dalla variabile di ambiente "TZ", per visualizzare quell'ora nel fuso orario locale:
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$
Nota nell'ultima riga che mostra 13:14, e nell'output sopra di esso, dove sto usando il mio fuso orario predefinito di US Mountain time (GMT-0700) mostra 6:14. La differenza è il secondo "ls" che imposto alla variabile d'ambiente TZ su GMT.
Potresti voler usare "stat" anche per esaminare tutte le ore/date associate ai file.