Mavericks 将标签保存为扩展属性

Mavericks 将标签保存为扩展属性

我还没有使用过 Mavericks。finder
是否将标签存储在文件本身中(例如:xmp),还是由某种数据库提供支持?或者其他什么?

答案1

Mavericks 将标签保存为扩展属性

现在 NDA 已经解除:Mavericks 将标签保存为扩展属性,在com.apple.metadata:_kMDItemUserTags。您可以使用分布式文件系统命令如下:

mdls -name kMDItemUserTags 你好

John Siracusa 对 OS X 10.9 的精彩评论描述标签架构详细地讲。

答案2

标签存储在名为 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 的标志。

答案3

据我从互联网上的多个来源了解到,Mavericks 很可能会将标签信息存储为与文件本身的 OpenMeta 策略非常接近的东西。到目前为止,我们已经有了标签,并且有几个应用程序可以提供帮助,例如 Leap/Yep。但这只是一种最佳实践,它被整合在标准的较低层 OpenMeta 之上。现在,Mavericks 希望更进一步,使标签(以及它们在文件系统中的编码方式)正式化。此外,标签将有一组固定的颜色(7 种?),这可能还有助于将标签拆分成集合以承载额外的语义。我们中的许多人认为,这可能是行业领导者在文件系统愿景方面迈出的一大步,最终将推动未来的选择(应用程序将更多地依赖这一点,也许 mac os 本身会期待一些特殊的系统范围注释)。为了详细起见,OpenMeta 希望将元数据描述为文件的 xattr(扩展属性),这样文件系统本身就不会关心它,因为超出了它的范围。

这个问题其实已经很老了,而且 Mavericks 很快就会变成 GM。因此,尽管只有与 Beta 域相关的信息,但我上面所说的都是合理的。互联网上有很多关于这个话题的讨论,其中一个特别的讨论如下:

https://groups.google.com/d/msg/openmeta/DK4Of2QGkpM/KIK9VKaCQdkJ

最有趣的部分是:

Apple 标签的实现方式与 OpenMeta 标签相同 - 作为附加到文件系统中文件的扩展属性。唯一的区别是属性名称是 _kMDItemUserTags 而不是 kMDItemOMUserTags(后一个标签中的“OM”代表“OpenMeta”)。Mavericks 标签和 OpenMeta 标签的标签数据都是属性列表,但我没有查看 plist 的内部格式,所以我不知道它们是否完全相同。我也不知道非 HFS+ 磁盘格式使用了什么辅助存储或替代方法(如果有的话)- 我知道 Apple 的宣传说您也可以在 iCloud 上标记文件,因此那里可能存在一些问题。

但总而言之,至少在本地 Mac 磁盘上,OpenMeta 标记数据需要迁移到新的 _kMDItemUserTags 属性,以便 Maverick 本地查看。这不是什么大问题,但需要有人编写一个实用程序来执行此操作。

相关内容