Hallo,
ich benutze z.Z. folgenden Befehl, um den Zeitstempel aus einer Datei auszulesen:
1 | gunzip -kN file.txt.gz && stat -c "%w" file.txt |
Geht das eigentlich noch besser (ohne die Datei jedes Mal entpacken zu müssen)?
Gruß
Carsten
![]() Anmeldungsdatum: Beiträge: 138 |
Hallo, ich benutze z.Z. folgenden Befehl, um den Zeitstempel aus einer Datei auszulesen:
Geht das eigentlich noch besser (ohne die Datei jedes Mal entpacken zu müssen)? Gruß Carsten |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13131 |
Ich glaube nicht, dass das verlässlich funktioniert, weil das "file birth" ist. Das sollte der Zeitpunkt des Auspackens sein. Du willst bestimmt eher den Modifikationszeitpunkt. Und den kann man von der komprimierten Datei ablesen:
|
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 138 |
Stimmt, du hast recht. Mein Beispiel ist blöd weil "file birth" der Zeitpunkt des Entpackens ist. Die Kernfrage bleibt aber. Wie kann ich bei einer .gz-Datei den "file birth" der gezippten Datei ermitteln, ohne das ich die Datei entpacken muss. |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 138 |
Also ich habe noch ein bisschen getestet. Mein Ubuntu gibt nicht den tatsächlichen Zeitstempel für "file birth" aus. Bei Änderungen an der Datei entspricht der "file birth" der modification time (mit sehr sehr kleinem Zeitunterschied). Mein RaspiOS gibt allerdings den tatsächlichen "file birth" aus. Ich habe jetzt einfach in logrotate-Konfiguration das Komprimieren der entsprechenden Logdateien auf dem Raspi abgestellt. So kann ich den gewünschten Zeitstempel der Log-Datei auslesen. Ich war erst etwas verwirrt über das unterschiedliche Verhalten der verschiedenen Systeme. Gruß Carsten |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13131 |
Ich hatte gedacht, GZip speichert keine Meta-Daten. Aber diese Python-Doku scheint etwas anderes nahezulegen. Und das wird durch die Definition des Formates bestätigt. Allerdings gibt es "birth" nicht. Soweit ich weiß, kann man "birth" nicht modifizieren (anders als "mtime") und es wird nicht von allen Betriebs- und Dateisystemen unterstützt. Von daher macht es durchaus Sinn, das nicht im Archiv zu speichern. Wenn Du so etwas willst, musst Du einen Archiver verwenden, der das kann. Vielleicht hat GNU tar das drauf - u.U. mit extra Optionen, die Du geben musst. Schau mal auf die Manpage. |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13131 |
Immer gut.
Beachte, dass der Wert von "birth" davon abhängt, wie die Software die Datei ändert - konkret: ob die Datei an der Stelle geändert wird oder eine neue Datei angelegt wird, die dann nachher den Platz der geänderten einnimmt. Du kannst das mit der Inode-Nummer prüfen, wie die jeweilige Software eine Dateiänderung macht.
Komprimierung abschalten ist schon ein recht dramatischer Eingriff. Vielleicht erläuterst Du mal, was Du eigentlich erreichen willst. Das ist immer hilfreich, wenn man eine Lösung sucht. |
||||
Ehemalige
![]() Anmeldungsdatum: Beiträge: 4658 Wohnort: Berlin |
Also laut RFC1952 ist die MTIME ein Unix-Zeitstempel an Offset 4 in der Datei. Könnte man in Python beispielsweise wie folgt auslesen und anzeigen:
|
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 138 |
Danke nochmal für Eure Hilfe. Das hat nochmal Licht ins Dunkel gebracht 😉
Hintergrund ist, das ich mir für meinen Medienserver eine "History"-Skript geschrieben habe. Ich habe die Logstufe des Servers erhöht, lese dann die IDs der zuletzt gestreamten Inhalte aus und kann dann die Datenbank nach weiteren Informationen abfragen. Dank Termux kann ich dann auch die Infos auf dem Smartphone sehen. Die Krux an der Sache war, das trotz höherer Logstufe kein einziger Zeitstempel in den Logdateien zu finden ist. Das wäre ja ein leichtes gewesen das mit den entsprechenden Tools auszulesen (auch gepackt). Und dann habe ich mich ein bisschen "festgebissen" an dem Auslesen des Zeitstempels direkt aus der .gz-Datei. Ich weiß, man könnte auch einen Stempel direkt in die Logdatei schreiben oder die Datei/Ordner überwachen. Aber das funktioniert jetzt so ganz gut mit den ungepackten Logdateien und dem Auslesen des Zeitstempels mit stat. Einen ähnliche Möglichkeit die mtime auszulesen hatte ich auch schon probiert mit dd und perl. Die Python-Lösung finde ich aber genauso spannend. Danke. Viele Grüße Carsten |
||||
Ehemalige
![]() Anmeldungsdatum: Beiträge: 4658 Wohnort: Berlin |
Warum
|
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 138 |
Marc_BlackJack_Rintsch schrieb:
Wegen des praktischen Einzeilers:
|
||||
Projektleitung
Anmeldungsdatum: Beiträge: 13131 |
Also Du brauchst eine Liste von Zeitstempeln samt ID des Inhaltes, der zu diesem Zeitpunkt gestreamt wurde?
Wie sieht denn so eine Logdatei aus?
Ich dachte das Format ist fix und definiert durch den Medienserver? Du liest doch nur das Log aus, das er sowieso schreibt.
Naja, bei der Lösung mit |