Änderungsdatum einer Datei ermitteln

Dieses Thema im Forum "Mac OS - Unix & Terminal" wurde erstellt von maceis, 24.02.2005.

  1. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.696
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    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 ...)?
     
  2. k123

    k123 MacUser Mitglied

    Beiträge:
    3
    Zustimmungen:
    0
    Mitglied seit:
    21.02.2004
    Mit "ls -lT" bekommst Du das Änderungsdatum angezeigt. Ist vielleicht etwas schwer zu parsen, aber besser als nichts.
     
  3. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.696
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    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!
     
  4. ratti

    ratti MacUser Mitglied

    Beiträge:
    1.515
    Zustimmungen:
    56
    Mitglied seit:
    09.05.2004
    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.
     
  5. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.696
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    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.
    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.
     
  6. ratti

    ratti MacUser Mitglied

    Beiträge:
    1.515
    Zustimmungen:
    56
    Mitglied seit:
    09.05.2004
    Ich weiß - aber bei -d wird beschrieben wie man das da:

    ...ändert. :)

    Was ist die "Usage-Information"?

    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. :)
     
  7. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.696
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    Klappt das bei Dir?
    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: 25.02.2005
  8. ratti

    ratti MacUser Mitglied

    Beiträge:
    1.515
    Zustimmungen:
    56
    Mitglied seit:
    09.05.2004
    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
     
  9. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.696
    Zustimmungen:
    602
    Mitglied seit:
    24.09.2003
    /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.
    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" ;-)
     
  10. ratti

    ratti MacUser Mitglied

    Beiträge:
    1.515
    Zustimmungen:
    56
    Mitglied seit:
    09.05.2004
    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
     
Die Seite wird geladen...

Diese Seite empfehlen