stat: Änderungszeitstempel einer Datei


11

Ich verwende stat -f %m .bashrc, um die Änderungszeit meiner .bashrc auf osx zu erhalten. Aber wenn ich den gleichen Befehl auf Ubuntu ausführe, wird ein Fehler ausgegeben:

stat: cannot read file system information for %m': No such file or directory

Gibt es einen kompatiblen Weg, um dies zu erreichen?

Antworten:


12

Ubuntu verwendet die GNU-Coreutils stat, während OSX die BSD-Variante verwendet. Unter Ubuntu ist der Befehl also etwas anders:

stat -c %Y .bashrc

Von man stat:

   -c  --format=FORMAT
          use the specified FORMAT instead of the default; output  a  new
          line after each use of FORMAT

und:

   %Y     time of last data modification, seconds since Epoch

Wenn Sie eine tragbare Methode wünschen, um diese unabhängig vom Betriebssystem auszuführen, gibt es verschiedene Möglichkeiten. Ich denke, ich würde eine Variable einmal auf die entsprechenden Parameter setzen:

if uname | grep -q "Darwin"; then
    mod_time_fmt="-f %m"
else
    mod_time_fmt="-c %Y"
fi

Verwenden Sie diesen Wert dann im statBefehl, wo immer dies erforderlich ist:

stat $mod_time_fmt .bashrc

7

Es kommt darauf an, was du mit "das" meinst. Wenn Sie sich fragen , ob es eine tragbare Art und Weise ist es, eine Datei zu erhalten ist mtimemit stat(1), dann nein, es ist nicht. BSD stat(1)unterscheidet sich von Linux stat(1).

Wenn Sie fragen, ob es eine tragbare Möglichkeit gibt, eine Datei mtimeabzurufen, können Sie dies mit perl(1)folgenden Methoden tun :

perl -e 'print +(stat $ARGV[0])[9], "\n"' file

5

Da die OSX- und Ubuntu-Versionen von stateinige Unterschiede aufweisen, da OSX statstandardmäßig eine knappe Ausgabe und Linux- statStandardeinstellungen eine ausführliche Version enthält, müssten einige Rahmen übersprungen werden. Eine Möglichkeit wäre, einfach einen Alias ​​unter OSX zu verwenden, damit stat auf beiden die gleiche Leistung erbringt.

Wenn es Ihnen nichts ausmacht, einen Alias statfestzulegen, mit dem die ausführliche Ausgabe unter OSX erzwungen wird, alias stat="stat -x"benötigen Sie kein Perl.

stat .bashrc| grep Modify ist alles was du unter Ubuntu brauchst. Wenn Sie den Alias ​​wie oben festlegen, funktioniert er auch unter OSX

Beispiel aus Ubuntu 14.04.5 Nahezu identische Ergebnisse können aus Ubuntu 16.04 erhalten werden

   stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500

Wenn Sie nur den Zeitstempel möchten, können Sie den Zeitstempel entfernen Modify:und den Rest behalten

stat .bashrc| grep Modify | cut -c 9-

Quellen:

https://ss64.com/osx/stat.html

Ausgabe von stat unter OSX


Ich denke, Sie vermissen -x Option unter OSX.
Fushupinnanren

@Derry Sie haben Recht, leider muss ich mich auf die Forschung für die OSX-Bits verlassen, da ich kein OSX habe. Antwort korrigiert.
Elder Geek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.