Interaktion zwischen „mdls“ und „mdimport“: Frage nach bewährten Verfahren

Gehe ich richtig davon aus, um eine Abfrage im Terminal sicherzustellen wie:

mdls -name kMDItemContentCreationDate /var/log/system.log

immer das tatsächliche Erstellungsdatum dieser Datei zurückgibt (sofern vorhanden), sollte ich Spotlight immer dazu zwingen, diese Informationen zuerst zu importieren über:

mdimport -r /var/log/system.log

?

Ich bin ausschließlich daran interessiert, dieses spezifische Datenelement vom Terminal zu erhalten.

Dies scheint die Schlussfolgerung basierend auf einem anderen SOV-Post zu sein , zumal die Spotlight-Indizierung einige Ordner möglicherweise ignoriert.

Ich habe noch nie gesehen, dass mdls etwas so Einfaches wie das Erstellungsdatum nicht abrufen konnten. Haben Sie eine reproduzierbare Situation, in der Ihre Indexierung dauerhaft unterbrochen ist? mddiagnoseVielleicht wäre es einfacher, Spotlight mit zu reparieren , als einen Import für jede Abfrage zu erzwingen - aber ich denke, wenn Sie die Abfrage selten durchführen, ist dies möglicherweise kein großer Leistungseinbruch.
Oh nein - ich bin nicht auf einen solchen Fall gestoßen. Alles, was ich versuche, ist, meinen Ansatz "kugelsicher" zu machen ... indem ich "das Richtige tue". Ich schreibe einige Skripte, die ein Produkt auf einer nicht trivialen Anzahl von Systemen bereitstellen, und ich verlasse mich auf diese Informationen (überschreibe eine ältere Version der Datei mit einer neueren). Dies sollte für genau zwei Dateien geschehen, wenn eine App gestartet wird ... normalerweise ein- oder zweimal am Tag. Danke schön.

Antworten (1)

Ich würde statstattdessen mdlsauf einem System verwenden, auf dem der 64-Bit-Kernel ausgeführt wird.

stat -f "%B" file

gibt das Erstellungsdatum oder die Geburtszeit in Sekunden seit Epoche (Unix/Epoch-Zeit) zurück. Eine menschenlesbare Ausgabe kann mit erzeugt werden

stat -f "%SB" file

Sie können die Ausgabe dieses Befehls auch formatieren, indem Sie die Option -t hinzufügen (siehe man 3 strftime).

Auf einem System mit 32-Bit-Kernel müssen Sie GetFileInfo.

GetFileInfo -d file

Die Ausgabe von GetFileInfokann in Epochenzeit konvertiert werden, indem die Ausgabe über den dateBefehl ausgeführt wird.

cdate=$(GetFileInfo -d file)
date -j -f "%m/%d/%Y %H:%M:%S" "$cdate" +%s