GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum funktioniert find -mtime bei Dateien mit unterschiedlichen Zeitzonen nicht wie erwartet?

Lösung 1:

Es ist möglich, dass das Problem mit der Zeitzone ein Ablenkungsmanöver ist.

find . -mtime 7

sollte Dateien finden, die genau sieben Tage alt sind ("sieben" bedeutet zwischen 7.000 und 7.999 Tagen, mehr oder weniger, und "alt" bedeutet "seit der letzten Änderung"). Wenn Sie Dateien möchten, die älter als sieben Tage sind, was dem Datum Ihrer ersten Datei (Juni 2010) nach zu urteilen der Fall ist, versuchen Sie es

find . -mtime +7

Ich stimme Ihnen zu, dass die scheinbare Zeitzone seltsam ist, aber ich denke, es ist erklärbar. man stat ist klar, dass eine time_t gespeichert wird, wie Sean R unten sagt. Was ls zeigt dies als Ortszeit an und ist so freundlich, lokale Sommerzeit-Konventionen zu berücksichtigen.

Mein System ist das gleiche:Dateizeiten, die zufällig in März-Oktober fallen, werden mit einer Zeitzone von +0100 angezeigt, während diejenigen, die in Okt-März fallen, mit einer Zeitzone von +0000 angezeigt werden, nicht weil dies im Dateisystem gespeichert ist, sondern weil die Zeitzonendatei meinem System mitteilt, dass ich im Juni, als ich die Datei berührte, es zu einer Zeit getan hätte, von der ich dachte, dass es 8 Uhr morgens war, und nicht, dass es 7 Uhr morgens sein würde, wenn es Winter wäre. ls ist so freundlich, bei der Anzeige von Zeiten, die zufällig im Sommer liegen, diese so darzustellen, wie sie im Sommer erschienen wären, das ist alles.

Wenn Sie Zeitzonen in Ihrem ls finden Ausgaben, die gemäß Ihrer örtlichen Konvention weder Sommer noch Winter sind, dann irre ich mich - aber ich kann keine auf meinem System finden.

Lösung 2:

Mit find funktioniert -mtime also in 24-Stunden-Perioden

-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

Lösung 3:

Um den Teil mit der Zeitzone etwas mehr zu erklären (die "mtime"-Diskussion wird von anderen Kommentaren behandelt) ...

Datum und Uhrzeit werden in den Dateien als Sekunden seit Mitternacht des 1. Januar 1970 UTC gespeichert. Das bedeutet, dass ihnen keine Zeitzone zugeordnet ist. Programme verwenden dann die Systemzeitzoneneinstellung in /etc/timezone , sofern nicht durch die Umgebungsvariable "TZ" überschrieben, um diese Zeit in der lokalen Zeitzone anzuzeigen:

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$

Beachten Sie, dass in der letzten Zeile 13:14 Uhr angezeigt wird und in der Ausgabe darüber, wo ich meine Standardzeitzone der US-Gebirgszeit (GMT-0700) verwende, 6:14 Uhr angezeigt wird. Der Unterschied ist das zweite "ls", in dem ich die TZ-Umgebungsvariable auf GMT gesetzt habe.

Sie können "stat" verwenden, um auch alle mit Dateien verknüpften Uhrzeiten/Daten zu untersuchen.


Linux
  1. Warum funktioniert der reguläre Ausdruck in X, aber nicht in Y?

  2. Warum gibt Find -mtime +1 nur Dateien zurück, die älter als 2 Tage sind?

  3. Mapping von Metadaten mit Avconv funktioniert nicht?

  4. Linux – Warum funktioniert Setuid nicht?

  5. Rm-Befehl im Bash-Skript funktioniert nicht mit Variablen?

Finden Sie verlorene Dateien mit Scalpel

Warum funktioniert find -exec mv {} ./target/ + nicht?

Warum schlägt Git beim Push/Fetch mit zu vielen geöffneten Dateien fehl?

Warum erkennt Windows keine Dateien in Linux-Partitionen?

Warum funktioniert diese Regex nicht unter Linux?

Automatische Wiederholung funktioniert nicht