Beste Methode zum Abrufen der Datei in Sekunden

8

Dies scheint ein klassischer Fall von Nicht-Standard-Features auf verschiedenen Plattformen zu sein.

Ganz einfach, ich möchte eine universelle (oder zumindest weit verbreitete) Methode, um die modifizierte Zeit einer Datei als Unix-Zeitstempel in Sekunden zu erhalten.

Ich kenne jetzt verschiedene Möglichkeiten, dies mit stat zu tun, aber die meisten sind plattformspezifisch; Zum Beispiel funktioniert stat -c %Y $file für einige, aber nicht für OS X (und vermutlich andere FreeBSD-Systeme), die stattdessen stat -f %m $file verwenden.

Gleichermaßen unterstützen einige Plattformen date -r $file +%s , OS X / FreeBSD wiederum nicht, da die Option -r anscheinend nur eine Alternative zur Verwendung von +%s für das Abrufen eines Unix-Zeitstempels anstelle der Referenzdateioption ist auf anderen Plattformen.

Die andere Alternative, die ich kenne, ist die Verwendung von find mit der Option -printf , aber auch dies wird nicht allgemein unterstützt. Die letzte Methode, die ich kenne, ist das Parsen von ls , was, abgesehen davon, dass es eine unangenehme Sache ist, nicht etwas ist, von dem ich glaube, dass man sich darauf verlassen kann (oder zumindest sollte).

Gibt es also eine kompatiblere Methode, um die Zeit einer Datei zu ändern? Momentan werfe ich nur verschiedene Varianten von stat in ein Skript und führe sie aus, bis einer mit dem Status Null beendet wird, aber das ist alles andere als ideal, selbst wenn ich den erfolgreichen Befehl zwischenspeichern werde, um ihn in Zukunft zu starten.

>     
Haravikk 26.07.2013, 10:11
quelle

2 Antworten

7

Da es so aussieht, als ob es keine "richtige" Lösung geben könnte, dachte ich, ich würde meine aktuelle zum Vergleich posten:

%Vor%

[Bearbeiten] Ich aktualisiere dies, um die aktuellere Version des von mir verwendeten Codes widerzuspiegeln, im Grunde testet es die beiden Hauptmethoden stat und eine etwas gewöhnliche date -Methode bei jedem Versuch, die modifizierte Zeit für das aktuelle Arbeitsverzeichnis zu erhalten und wenn eine der Methoden erfolgreich ist, erstellt sie eine Funktion, die sie zur späteren Verwendung im Skript einkapselt.

Diese Methode unterscheidet sich von der vorherigen, die ich gepostet habe, da sie immer etwas verarbeitet, auch wenn get_modified_time nie aufgerufen wird, aber es ist insgesamt effizienter, wenn Sie es die meiste Zeit aufrufen müssen. Sie können auch früher eine nicht unterstützte Plattform abfangen.

Wenn Sie die Funktion bevorzugen, die nur Funktionen testet, wenn sie aufgerufen wird, dann ist hier die andere Form:

%Vor%     
Haravikk 28.07.2013, 10:10
quelle
0

Fragen Sie einfach das Betriebssystem nach seinem Namen und gehen Sie von dort aus. Alternativ schreiben Sie ein C-Programm oder verwenden Sie Python oder etwas anderes, das ziemlich häufig und standardisierter ist: Wie bekomme ich Dateierstellung & amp; Änderungsdatum / -zeiten in Python?

    
John Zwinck 27.07.2013 09:06
quelle

Tags und Links