Ich habe einige Dateien auf einem Server mit dem Datum vor einigen Monaten, aber sie sind für die find -mtime 7
Suche unsichtbar .
Wenn ich sie mit ls -l
aufliste, sehen sie ganz normal aus:
-rw-r--r-- 1 root root 347253 Jun 12 16:26 pedia_main.2010-06-12-04-25-02.sql.gz
-rw-r--r-- 1 root root 490144578 Nov 24 16:26 gsmforum_main.2010-11-24-04-25-02.sql.gz
Die obere Datei ist für "find. -Mtime 1" nicht sichtbar, die untere ist jedoch sichtbar.
Ich schlug fast meinen Kopf gegen die Wand und versuchte zu verstehen warum. Ich habe einige zufällige Dinge ausprobiert und bin auf ls --full-time
Befehl gestoßen. Und es zeigt, dass diese beiden irgendwie ein bisschen anders sind
-rw-r--r-- 1 root root 347253 2010-06-12 16:26:20.000000000 +0400 pedia_main.2010-06-12-04-25-02.sql.gz
-rw-r--r-- 1 root root 490144578 2010-11-24 16:26:12.000000000 +0300 gsmforum_main.2010-11-24-04-25-02.sql.gz
Das Datum scheint in Ordnung zu sein. Bit eins hat +0400
als Zeitzone und ein anderes ist +0300
. Wie kommt find
es, dass man die nicht findet +0400
?
Das Betriebssystem ist CentOS 5.5 Final mit den neuesten Updates und die ls
Version ist (GNU coreutils) 5.97
.
Außerdem verstehe ich nicht, wo diese "Zeitzone" der Datei gespeichert ist. Der Inode verfügt anscheinend über keine zusätzlichen Attribute zum Speichern. Das Dateisystem auf dem Server ist ext4 .
Antworten:
Es ist möglich, dass das Problem der Zeitzone ein roter Hering ist.
sollte Dateien finden, die genau sieben Tage alt sind ("sieben" bedeutet zwischen 7.000 und 7.999 Tage, Geben oder Nehmen und "alt" bedeutet "seit der letzten Änderung"). Wenn Sie Dateien möchten, die älter als sieben Tage sind, gemessen am Datum Ihrer ersten Datei (Juni 2010), versuchen Sie es
Ich stimme Ihnen zu, dass die scheinbare Zeitzone seltsam ist, aber ich denke, dass sie erklärbar ist.
man stat
Es ist klar, dass ein time_t gespeichert ist, wie Sean R unten sagt. Was diesls
tut, ist, dies als Ortszeit anzuzeigen, und es ist so freundlich, dabei die lokalen Sommerzeitkonventionen zu berücksichtigen.Mein System ist das gleiche: Dateizeiten, die zufällig von März bis Oktober fallen, werden mit einer Zeitzone von +0100 angezeigt, während diejenigen, die von Oktober bis 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 es im Juni, als ich die Datei berührte, zu einem Zeitpunkt getan hätte, von dem ich dachte, es wäre 8 Uhr morgens, nicht 7 Uhr morgens, wenn es Winter wäre.
ls
ist so freundlich, wenn man Zeiten anzeigt, die zufällig im Sommer sind, um sie so zu zeigen, wie sie im Sommer erschienen wären, das ist alles.Wenn Sie in Ihrer
ls
Ausgabe Zeitzonen finden , die gemäß Ihrer örtlichen Konvention weder Sommer noch Winter sind, irre ich mich - aber ich kann keine auf meinem System finden.quelle
Mit find funktioniert -mtime also in 24 Stunden
quelle
mtime 7
Variante verwendet. Aber es funktioniert auch nicht, obwohl das Datum viel in der Vergangenheit liegt.+
in Ihrer Zeitangabe haben, z. B.-mtime +7
die alle Dateien findet, die älter als 7 Tage sind.-mtime +0 means greater than 24 hours ago
-mtime +1 means greater than 24 hours + one day (48 hours ago)
> find $ HOME -mtime 0 Suche nach Dateien in deinem Home-Verzeichnis, die in den letzten vierundzwanzig Stunden geändert wurden. Dieser Befehl funktioniert auf diese Weise, da die Zeit seit der letzten Änderung jeder Datei durch 24 Stunden geteilt wird und der Rest verworfen wird. Das bedeutet, dass eine Datei, um mit -mtime 0 übereinzustimmen, in der Vergangenheit geändert werden muss, was weniger als 24 Stunden her ist.Um den Zeitzonenanteil etwas näher zu erläutern (die "mtime" -Diskussion wird von anderen Kommentaren behandelt) ...
Datum und Uhrzeit werden seit dem 1. Januar 1970, UTC, um Mitternacht in Sekunden in Dateien gespeichert. Dies bedeutet, dass ihnen keine Zeitzone zugeordnet ist. Programme verwenden dann die Systemzeitzoneneinstellung in
/etc/timezone
, sofern diese nicht von der Umgebungsvariablen "TZ" überschrieben wird, um diese Zeit in der lokalen Zeitzone anzuzeigen:Beachten Sie, dass in der letzten Zeile 13:14 Uhr und in der Ausgabe darüber, in der ich meine Standardzeitzone für die US-Bergzeit (GMT-0700) verwende, 6:14 Uhr angezeigt wird. Der Unterschied ist das zweite "ls", für das ich die Umgebungsvariable TZ auf GMT gesetzt habe.
Möglicherweise möchten Sie "stat" verwenden, um auch alle mit Dateien verknüpften Zeiten / Daten zu überprüfen.
quelle
ls
Liste unterschiedliche Zeitzonendaten im mtime-Attribut haben.Darüber hinaus verwende ich häufig Folgendes:
Das sagt find, um Dateien zu finden, die ab dem heutigen Tag bis zu (7 * 24) Stunden alt sind.
quelle