Änderungsdatum einer Datei ermitteln

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
Hallo zusammen,

nachdem stat auf Mac OS X ja standardmäßig nicht zur Verfügung steht, frage ich mich, wie man in einem Shellskript am einfachsten das Änderungsdatum einer Datei ermittelt.
Mit Perl geht es ja relativ einfach, aber wie macht man das direkt in der Shell(sh, bash, zsh ...)?
 
Mit "ls -lT" bekommst Du das Änderungsdatum angezeigt. Ist vielleicht etwas schwer zu parsen, aber besser als nichts.
 
k123 schrieb:
Mit "ls -lT" bekommst Du das Änderungsdatum angezeigt. Ist vielleicht etwas schwer zu parsen, aber besser als nichts.
Ja richtig.
Die Idee hatte ich auch schon. Die Betonung bei der Frage lag auf "einfach".

Für die zsh gibt es, wie ich inzwischen nachgelesen habe, ein zuladbares Modul, das ein builtin als Schnittstelle zum Systemaufruf 'stat' zur Verfügung stellt.
Sieht dann so aus:
% stat dateiname
device 234881044
inode 1871730
mode 33188
nlink 1
uid 501
gid 501
rdev 0
size 571
atime 1109275356
mtime 1109275032
ctime 1109275032
blksize 4096
blocks 8
link

Das ist doch schon mal was, oder?
Wenn jemad noch was weiss für die anderen Shells, bitte melden!
 
maceis schrieb:
Wenn jemad noch was weiss für die anderen Shells, bitte melden!

GetFileInfo im Developer-Paket. Die "-d"-Option ist sehr interessant.

Gruß, Ratti

P.S.: Ich nehme mal an, das Fehlen hängt damit zusammen, daß HFS+ mehr/andere Infos speichert, als stat abfragt.
 
ratti schrieb:
GetFileInfo im Developer-Paket. Die "-d"-Option ist sehr interessant.
Ah ja, Sieh' an. Das hatte ich ja ganz vergessen. Die Änderungszeit wird aber mit "-m" ausgegeben.
Das Format der Ausgabe ist ein bisschen blöd, aber das kann/muss man parsen. Die man-Page sit übrigens in dieser Hinsicht fehlerhaft und weisst von der "usage"-Information ab.
ratti schrieb:
P.S.: Ich nehme mal an, das Fehlen hängt damit zusammen, daß HFS+ mehr/andere Infos speichert, als stat abfragt.
Könnte sein, ist aber für mich kein hinreichender Grund nicht wenigstens die Informationen herauszurücken, die 'stat' liefern kann, zumal der enstprechende Systemaufruf ja zur Verfügung steht.
'find', 'tar' und andere Kommandos sind ja auch in der Lage z. B. die Änderungszeit abzufragen.
 
maceis schrieb:
Ah ja, Sieh' an. Das hatte ich ja ganz vergessen. Die Änderungszeit wird aber mit "-m" ausgegeben.

Ich weiß - aber bei -d wird beschrieben wie man das da:

maceis schrieb:
Das Format der Ausgabe ist ein bisschen blöd, aber das kann/muss man parsen.

...ändert. :)

maceis schrieb:
Die man-Page sit übrigens in dieser Hinsicht fehlerhaft und weisst von der "usage"-Information ab.

Was ist die "Usage-Information"?

maceis schrieb:
Könnte sein, ist aber für mich kein hinreichender Grund nicht wenigstens die Informationen herauszurücken, die 'stat' liefern kann, zumal der entsprechende Systemaufruf ja zur Verfügung steht.
'find', 'tar' und andere Kommandos sind ja auch in der Lage z. B. die Änderungszeit abzufragen.

Hast ja recht, aber mir war auch schon aufgefallen, daß zum Beispiel bei cp der "-a"-Switch nicht existiert, der unter Gnu das "Archiv"-kopieren zulässt - unter Beibehaltung aller Dateiattribute incl. Datum. Logisch ist das nicht, weil "SetFile" das dann doch wieder erlaubt. Entweder hat Apple sich in der Datums-Ecke verbastelt, oder es gibt einen guten Grund oberhalb meines Intelligenzniveaus. :)
 
ratti schrieb:
maceis schrieb:
Ah ja, Sieh' an. Das hatte ich ja ganz vergessen. Die Änderungszeit wird aber mit "-m" ausgegeben.
Ich weiß - aber bei -d wird beschrieben wie man das da:
maceis schrieb:
Das Format der Ausgabe ist ein bisschen blöd, aber das kann/muss man parsen.
...ändert. :)
Klappt das bei Dir?
ratti schrieb:
maceis schrieb:
Die man-Page ist übrigens in dieser Hinsicht fehlerhaft und weisst von der "usage"-Information ab.

Was ist die "Usage-Information"?
Das ist das, was erscheint, wenn man versucht, das Ausgabeformat so zu ändern, wie das in der man-page bei -d beschrieben ist ;-)
 
Zuletzt bearbeitet:
maceis schrieb:
Klappt das bei Dir?

Nein. Und je öfter ich in die manpage schaue, um so mehr denke ich, da ist was falsch. Das ist gar kein Formatstring für die Ausgabe. Das ist einfach ge-copy-paste-d von der manpage für "SetFile" und somit ein Dokumentationsbug.

Interessant finde ich allerdings, daß bei...

GetFileInfo -d"mmddyy" egal.txt


...keine Fehlermeldung kommt. Kein Space nach dem d. Aber auch kein Resultat. Leider ist GetFileInfo ein binary, also kein reingucken für mich.

Tja. Also GetFileInfo parsen, perl verwenden oder endlich ein vernünftiges Problem, um C zu lernen. :)

Gruß, Ratti
 
ratti schrieb:
Nein. Und je öfter ich in die manpage schaue, um so mehr denke ich, da ist was falsch. Das ist gar kein Formatstring für die Ausgabe. Das ist einfach ge-copy-paste-d von der manpage für "SetFile" und somit ein Dokumentationsbug.

Interessant finde ich allerdings, daß bei...

GetFileInfo -d"mmddyy" egal.txt
/Developer/Tools/GetFileInfo -d "mmddyy" dateiname
usage: /Developer/Tools/GetFileInfo [-a[<attrib-letter>] | -t | -c | -d | -m] <path>

Das meinte ich mit Usage-Information. Im manual heisst es ja auch -d date und nicht -ddate.
Dass keine Fehlermeldung kommt ist um so eigenartiger.
ratti schrieb:
...keine Fehlermeldung kommt. Kein Space nach dem d. Aber auch kein Resultat. Leider ist GetFileInfo ein binary, also kein reingucken für mich.

Tja. Also GetFileInfo parsen, perl verwenden oder endlich ein vernünftiges Problem, um C zu lernen. :)
Das Problem, das der Frage zugrunde liegt habe ich eigentlich schon längst gelöst.
Es geht dabei um ein Shellskript, das lokale Verzeichnise (Entwicklung von Webseiten) auf den Server spiegelt, ohne dass ich mir Gedanken machen muß, welche Dateien ich geändert/neu angelegt/verschoben etc. habe.

Jetzt habe ich eigentlich nur noch nach Möglichkeiten gesucht es "anders" zu machen.
Bevor ich GetFileInfo parse, würde ich ein zsh Skript schreiben.
Die Asugabe in "seconds from epoche" ist zum Vergleichen ja schon optimal.
Heute würde ich aber anstelle eines Shellskriptes Perl einsetzen.
C ist mir für so eine Sache zu "unhandlich" ;-)
 
maceis schrieb:
Bevor ich GetFileInfo parse, würde ich ein zsh Skript schreiben.
Die Asugabe in "seconds from epoche" ist zum Vergleichen ja schon optimal.
Heute würde ich aber anstelle eines Shellskriptes Perl einsetzen.
C ist mir für so eine Sache zu "unhandlich" ;-)

Da fallen mir aber noch ein paar Spezis ein. rsync, cvs, svn, weex und (wild guess: sitecopy?)

weex geht auch ohne Shellzugriff auf dem Server.

Gruß, Ratti
 
ratti schrieb:
Da fallen mir aber noch ein paar Spezis ein. rsync, cvs, svn, weex und (wild guess: sitecopy?)
Na ja; ich hab halt bei den Hostern "nur" ftp-Zugriff, da fallen manche ja schon mal raus.
Das "Arbeitspferd" in meinem Skript ist curl.
Nachdem ich das aber ziemlich "zusammengeschustert" habe, steht da wohl mal eine Überarbeitung an ;-)
 
maceis schrieb:
Na ja; ich hab halt bei den Hostern "nur" ftp-Zugriff, da fallen manche ja schon mal raus.

Dann ist weex sehr gut.

Gruß,
Ratti
 
Zurück
Oben Unten