Answers:
标签存储在名为com.apple.metadata:_kMDItemUserTags的扩展属性中。它的值是一个二进制属性列表,其中包含单个字符串数组:
$ xattr -p com.apple.metadata:_kMDItemUserTags file3|xxd -r -p|plutil -convert xml1 - -o -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>Red
6</string>
<string>aa</string>
<string>Orange
7</string>
<string>Yellow
5</string>
<string>Green
2</string>
<string>Blue
4</string>
<string>Purple
3</string>
<string>Gray
1</string>
</array>
</plist>
颜色标签的值类似于Red\n6
(其中\n
是换行符)。
您可以使用xattr将标签从一个文件复制到另一个文件:
xattr -wx com.apple.metadata:_kMDItemUserTags "$(xattr -px com.apple.metadata:_kMDItemUserTags file1)" file2
xattr -wx com.apple.FinderInfo "$(xattr -px com.apple.FinderInfo file1)" file2
如果com.apple.FinderInfo中的kColor标志未设置,则Finder不会在文件旁边显示圆圈。如果kColor标志设置为橙色,并且文件带有红色标签,则Finder同时显示红色和橙色圆圈。您可以使用AppleScript设置kColor标志:
xattr -w com.apple.metadata:_kMDItemUserTags '("Red\n6","new tag")' ~/desktop/file4"
osascript -e 'tell application "Finder" to set label index of file "file4" of desktop to item 1 of {2, 1, 3, 6, 4, 5, 7}'
'("Red\n6","new tag")'
是老式的plist语法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>Red
6</string>
<string>new tag</string>
</array>
</plist>
xattr -p com.apple.FinderInfo file|head -n1|cut -c28-29
打印用于kColor标志的位的值。红色是C,橙色是E,黄色是A,绿色是4,蓝色是8,洋红色是6,灰色是2。在OS X中未使用将值加1的标志。
据我在互联网上可以从多个来源看到的那样,小牛很可能会将标签信息存储为与文件本身真正接近OpenMeta策略的东西。到目前为止,我们已经有了标签,并且有一些应用程序在此方面有所帮助-例如Leap / Yep。但这只是整合在标准下层-OpenMeta之上的最佳实践。现在,Mavericks希望进一步使标签(以及标签在文件系统中的编码方式)正式化。Plus标签将具有一组固定的颜色(7?),这可能另外有助于将标签拆分为一组以携带额外的语义。我们中的许多人认为,这可能是一个大型行业领导者在文件系统愿景中迈出的一大步,以最终推动未来的选择(应用程序将更加依赖于此,并且Mac OS本身可能会期望一些特殊的系统范围注释)。为了详细起见,OpenMeta希望将元数据描述为文件的xattr(扩展属性),这样文件系统本身就不会在乎它,因为它超出了范围。
这个问题实际上已经很老了,Mavericks将很快转为通用汽车。.因此,尽管事实上只有与Beta域相关的信息,但我上面所说的完全合理。互联网上有许多关于此主题的讨论,特别是在这里:
https://groups.google.com/d/msg/openmeta/DK4Of2QGkpM/KIK9VKaCQdkJ
最有趣的部分是:
Apple标记的实现方式与OpenMeta标记的实现方式相同-作为附加到文件系统中文件的扩展属性。唯一的区别是属性名称是_kMDItemUserTags而不是kMDItemOMUserTags(后一个标记中的“ OM”用于“ OpenMeta”)。Mavericks标签和OpenMeta标签的标签数据都是属性列表,但是我没有查看plists的内部格式,所以我不知道它们是否完全相同。我也不知道用于非HFS +磁盘格式的辅助存储或替代方法(如果有的话)-我知道苹果公司的大肆宣传说您也可以在iCloud上标记文件,因此那里可能存在一些问题。
但是,总的说来,就是至少在本地Mac磁盘上,OpenMeta标记数据将需要迁移到新的_kMDItemUserTags属性,以便Maverick可以原生查看。没什么大不了的,但是有人需要编写一个实用程序来做到这一点。