While reorganizing my images, in anticipation of OSX Mavericks I am writing a script to insert tags into the xattr
fields of my image files, so I can search them with Spotlight. (I am also editing the EXIF just to be safe.)
My questions are:
Which attribute is the best to use?
_kMDItemUserTags
seems to be the OSX version, butkMDItemOMUserTags
is already in use by OpenMeta. I would ideally like something that will be Linux and OSX forward compatible.How do I set multiple tags? Are the comma- or space-delimited or something else?
As an example, using the python xattr
module, I am issuing these commands:
xattr.setxattr(FileName, "_kMDItemUserTags", "Name - Sample")
xattr.setxattr(FileName, "kMDItemOMUserTags", "Name,Institution,Sample")
I have also seen mention of these tags: kOMUserTags
and kMDItemkeywords
but don't know if they are likely to be implemented...
EDIT: Further investigation has shown that for things to be searchable in 10.8,
- You need to preface the kMD with com.apple.metadata:
- You have to either hex-encode or wrap in a plist.
This python code will generate the tag for kMDItemFinderComment which is searchable in spotlight...
def writexattrs(F,TagList):""" writexattrs(F,TagList):writes the list of tags to three xattr field:'kMDItemFinderComment','_kMDItemUserTags','kMDItemOMUserTags'This version uses the xattr library """plistFront = '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array>'plistEnd = '</array></plist>'plistTagString = ''for Tag in TagList:plistTagString = plistTagString + '<string>{}</string>'.format(Tag)TagText = plistFront + plistTagString + plistEndOptionalTag = "com.apple.metadata:"XattrList = ["kMDItemFinderComment","_kMDItemUserTags","kMDItemOMUserTags"]for Field in XattrList:xattr.setxattr (F,OptionalTag+Field,TagText.encode('utf8'))# Equivalent shell command is xattr -w com.apple.metadata:kMDItemFinderComment [PLIST value] [File name]
I could not get it to work recursively on a folder with reliable results.