GNU/Linux >> Linux Esercitazione >  >> Linux

Perché find -mtime non funziona come previsto su file con fusi orari diversi?

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.


Linux
  1. Perché l'espressione regolare funziona in X ma non in Y?

  2. Perché la sostituzione del processo Bash non funziona con alcuni comandi?

  3. La mappatura dei metadati con Avconv non funziona?

  4. Il comando Rm nello script Bash non funziona con la variabile?

  5. Perché `esce &` non funziona?

Trova i file persi con Scalpel

Linux:perché Locale Es_mx funziona ma non Es?

Linux:perché Rsync su Linux non conserva tutti i timestamp (ora di creazione)?

Perché find -exec mv {} ./target/ + non funziona?

Perché la modifica di javascript negli Strumenti per sviluppatori di Chrome non funziona?

Perché Windows non riconosce i file all'interno delle partizioni Linux?