Bearbeiten von iPhoto-spezifischen Metadaten

Perpetua:2011-01-16 ashley $ mdls IMAG0107.jpg

...

kMDItemComment = "Katze mit herausgestreckter Zunge."

Also, hier ist meine Frage. xattrkann verwendet werden, um einige Attribute zu ändern. Zum Beispiel:

Perpetua:2011-01-16 ashley $ xattr -l IMAG0107.jpg
com.apple.metadata:kMDItemFinderComment:
00000000 62 70 6C 69 73 74 30 30 50 08 00 00 00 00 00 00 |bplist00P.......|
00000010 01 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 09 |..........|
0000002a
Perpetua:2011-01-16 ashley$

Dies ist jedoch nicht das Attribut, das ich bearbeiten möchte. Ich denke, das liegt daran, dass kMDItemComment ein iPhoto-spezifisches Stück Metadaten ist. Meine Frage wäre, wie gehe ich vor, um es zu bearbeiten?

Die obige Datei ist ein Foto mit einer Beschreibung, die ich aus iPhoto heraus hinzugefügt habe.
@Nathan Tatsächlich habe ich versucht, diese Frage zu beantworten, so habe ich herausgefunden, wo/wie die Metadaten gespeichert wurden. Jetzt bin ich neugierig, wie man es selbst bearbeitet. Und ich werde den Autor dieser Frage auf diesen Weg hinweisen, wenn jemand eine Lösung hat. :-)
Sie meinen, wie Sie die XML-Dateien bearbeiten oder wie Sie Ihre Änderungen beibehalten können?
@ Nathan G. Weder noch. Das Beschreibungsfeld in iPhoto bearbeitet tatsächlich die Dateimetadaten (wie oben gezeigt). Die Daten, die in dieser XML-Datei gespeichert sind, sind meines Erachtens nur iPhoto, die die Metadaten zwischenspeichern. Das Einlesen der Informationen aus der XML-Datei ist offensichtlich schneller, als rekursiv durch Tausende von Fotos zu gehen und die Metadaten von jedem zu lesen.
Ich bin mir nicht sicher, aber ich stelle fest, dass mdlsreturn kMDItemCommentund xattr zeigen, kMDItemFinderCommentwas unterschiedliche Attribute sind.
@mankoff Ja, und das ist das Problem. kMDItemFinderComment stammt von com.apple.metadata.. kMDItemComment scheint von woanders zu stammen, und ich bin mir nicht sicher, woher. Ich vermute iPhoto-spezifische Metadaten, weiß aber nicht, wie ich richtig darauf zugreifen kann, um sie zu schreiben.
Haben Sie versucht, das Flag "-x" für xattr zu verwenden?
@mankoff - Äh ... ich habe es gerade getan. Offensichtlich erreichen Sie etwas, und ich verpasse es. Was soll mir das bringen? ...
Oh nein, ich bin nicht obskur. Klingt nach einem schwierigen Problem.
@mankoff Gotcha. Ja, das Flag -x zeigt interessanterweise, dass es einen kMDItemFinderComment gibt, der nur ein Hex zu sein scheint ... definitiv ein seltsames Problem.

Antworten (3)

com.apple.metadata:kMDItemFinderComment ist im binären Eigenschaftslistenformat . Using xattr -p -l -x | tail +2gibt Ihnen nur den Hex-Dump des Attributs. Sie können das dann weiterleiten, xxd -rum es wieder in eine Binärdatei umzuwandeln.

Von dort aus können Sie diese Datei im Property List Editor von Apple öffnen, vorausgesetzt, Sie haben die Developer Tools installiert. Anschließend können Sie die Eigenschaft visuell bearbeiten.

xxd -p -xSie sollten dann in der Lage sein, den bearbeiteten Wert mit und erneut auf die Datei anzuwenden xattr -w -x.

Das ist alles viel chaotischer, als man es sich für eine einzelne Eigenschaft, die nur ein String ist, wirklich wünscht.

Hmm. Ich kann bereits das ASCII/Binär-Äquivalent erhalten, indem ich xattr -l <foo>.jpg ausführe. Die Zeichenfolge kommt zurück zu "bplist00P". Ich bin mir nicht sicher, was ich damit anfangen soll.
Das ist nicht die Saite. Das ist die "Magie" am Anfang des Dateiformats der binären Eigenschaftsliste. Im obigen Beispiel ist die Zeichenfolge tatsächlich die leere Zeichenfolge.
Wenn Sie mit Binärdateien arbeiten plist, plutil -convert xml1 file.plistkann dies hilfreich sein.
Ich habe es nicht geschafft, diese Arbeit zu machen. Danke aber für die Anregungen.

Man kann dies auf "Mac"-Weise (per AppleScript) tun, indem man das folgende Skript verwendetsetFinderComment.scpt

#!/usr/bin/osascript
on run argv
    set filePath to POSIX file (item 1 of argv)
    set fileComment to item 2 of argv
    set theFile to filePath as alias
    tell application "Finder" to set comment of theFile to fileComment
end run

Dann machst du es ausführbar chmod a+x setFinderComment.scptund verwendest es als

setFinderComment.scpt filename comment

Das OpenMeta-Projekt verwendet die erweiterten Attribute, um ihre Tags zu speichern. Der Quellcode ist unter https://code.google.com/p/openmeta/ verfügbar . Teil dieses Projekts sind offene Meta-Kommandozeilen-Tools.

Dieses Befehlszeilentool arbeitet mit einem vordefinierten Satz von Attributen, die von OpenMeta verwendet werden, aber da es Open Source ist, kann es leicht angepasst werden, um zusätzliche Befehlszeileneinstellungen zum Setzen/Lesen anderer erweiterter Attribute zu ermöglichen.

Keine direkte Lösung, sondern ein Weg zur Lösung ?

@Mira A. Ich habe gerade nachgesehen - es gibt nur ein Befehlszeilentool. Es scheint nur ein erweitertes Attribut zu unterstützen, und das ist dasjenige, das OpenMeta für Bewertungen und dergleichen verwendet. Danke für den Hinweis, aber es sieht nicht so aus, als würde es das tun, was ich will ...