Edición de metadatos específicos de iPhoto

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

...

kMDItemComment = "Gato con la lengua afuera".

Entonces, aquí está mi pregunta. xattrse puede utilizar para modificar algunos atributos. Por ejemplo:

Perpetua:2011-01-16 ashley$ xattr -l IMAG0107.jpg
com.apple.metadata:kMDItemFinderComentario:
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$

Pero este no es el atributo que quiero editar. Me imagino que esto se debe a que kMDItemComment es un metadato específico de iPhoto. Mi pregunta sería, ¿cómo hago para editarlo?

El archivo de arriba es una foto, con una descripción que agregué desde dentro de iPhoto.
@Nathan De hecho, estaba tratando de responder esa pregunta, así es como descubrí dónde/cómo se almacenaron los metadatos. Ahora tengo curiosidad sobre cómo lo edito yo mismo ... y señalaré al autor de esa pregunta de esta manera si alguien tiene una solución. :-)
¿Quiere decir cómo editar los archivos XML o cómo hacer que sus cambios se mantengan?
@Nathan G. Tampoco. El campo de descripción en iPhoto en realidad edita los metadatos del archivo (como se muestra arriba). Creo que los datos almacenados dentro de ese archivo xml son solo iPhoto almacenando en caché los metadatos. Leer la información desde el archivo XML es obviamente más rápido que revisar recursivamente lo que podrían ser miles de fotos y leer los metadatos de cada una.
No estoy seguro, pero noto que mdlsreturn kMDItemCommenty xattr muestran kMDItemFinderCommentcuáles son atributos diferentes.
@mankoff Sí, y ese es el problema. kMDItemFinderComment proviene de com.apple.metadata.. kMDItemComment parece ser de otro lugar, y no estoy seguro de dónde. Sospecho que hay metadatos específicos de iPhoto, pero no sé cómo acceder a ellos correctamente para escribirlos.
¿Has intentado usar el indicador "-x" para xattr?
@mankoff - Er... lo acabo de hacer. Claramente estás llegando a algo y me lo estoy perdiendo. ¿Qué debería hacer eso por mí?...
Oh no, no estoy siendo oscuro. Suena como un problema difícil.
@mankoff Te tengo. Sí, el indicador -x muestra de manera interesante que hay un kMDItemFinderComment, que parece ser solo un maleficio... definitivamente un problema extraño.

Respuestas (3)

com.apple.metadata:kMDItemFinderComment está en formato de lista de propiedades binarias . El uso xattr -p -l -x | tail +2le da solo el volcado hexadecimal del atributo. Luego puede canalizar eso xxd -rpara convertirlo nuevamente en un archivo binario.

Desde allí, puede abrir ese archivo en el Editor de listas de propiedades de Apple, suponiendo que tenga instaladas las Herramientas para desarrolladores. A continuación, puede editar la propiedad visualmente.

Entonces debería poder volver a aplicar el valor editado al archivo usando xxd -p -xy xattr -w -x.

Todo esto es mucho más complicado de lo que uno realmente quiere para una sola propiedad que es solo una cadena.

Mmm. Ya puedo obtener el equivalente ASCII/Binario haciendo xattr -l <foo>.jpg. La cadena vuelve a "bplist00P"... con lo que no estoy seguro de qué hacer.
Esa no es la cuerda. Esa es la "magia" al comienzo del formato de archivo de la lista de propiedades binarias. En el ejemplo anterior, la cadena es en realidad la cadena vacía.
Si está trabajando con plistarchivos binarios, entonces plutil -convert xml1 file.plistpodría ser útil.
No he sido capaz de hacer que esto funcione. Gracias por las sugerencias.

Uno puede hacer esto en la forma "Mac" (por AppleScript), usando el siguiente scriptsetFinderComment.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

Luego lo haces ejecutable chmod a+x setFinderComment.scpty lo usas como

setFinderComment.scpt filename comment

El proyecto OpenMeta está utilizando los atributos extendidos para almacenar sus etiquetas. El código fuente está disponible en https://code.google.com/p/openmeta/ . Parte de ese proyecto son las herramientas de línea de comandos meta abiertas.

Esta herramienta de línea de comandos funciona con un conjunto predefinido de atributos utilizados por OpenMeta, pero como es de código abierto, se puede adaptar fácilmente para permitir una configuración de línea de comandos adicional para configurar/leer otros atributos extendidos.

¿No es una solución directa, sino un camino hacia una solución?

@Mira A. Acabo de comprobar: solo hay una herramienta de línea de comandos. Solo parece admitir un atributo extendido, y ese es el que usa OpenMeta para las calificaciones y demás. Gracias por señalarlo, pero no parece que vaya a hacer lo que quiero...