xattr
画像を整理しているときに、OSX Mavericks を見越して、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 を付ける必要があります。
- 16 進エンコードするか、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]
信頼できる結果を持つフォルダーで再帰的に動作させることができませんでした。