在重新组织我的图像时,为了期待 OSX Mavericks,我正在编写一个脚本来将标签插入到xattr
我的图像文件的字段中,这样我就可以使用 Spotlight 搜索它们。(为了安全起见,我也在编辑 EXIF。)
我的问题是:
哪个属性最好用?
_kMDItemUserTags
似乎是 OSX 版本,但kMDItemOMUserTags
已被 OpenMeta 使用。理想情况下,我希望能够与 Linux 和 OSX 前向兼容。如何设置多个标签?是逗号或空格分隔还是其他?
例如,使用 pythonxattr
模块,我发出这些命令:
xattr.setxattr(FileName, "_kMDItemUserTags", "Name - Sample")
xattr.setxattr(FileName, "kMDItemOMUserTags", "Name,Institution,Sample")
我也看到提到这些标签:kOMUserTags
但kMDItemkeywords
不知道它们是否可能被实施......
编辑:进一步调查表明,对于 10.8 中可搜索的内容,
- 您需要在 kMD 前面加上 com.apple.metadata:
- 您必须进行十六进制编码或包装在 plist 中。
此 python 代码将为 kMDItemFinderComment 生成标签,该标签可在聚光灯下搜索...
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 + plistEnd
OptionalTag = "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]
我无法让它在具有可靠结果的文件夹上递归工作。