小牛的Finder如何存储标签?


13

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


在询问有关OS X Maverick的问题之前,可能需要尝试一下。
Ramhound

请注意,在文件系统中使用Mavericks进行标记的方法不仅限于Finder。
格雷厄姆·佩林

Answers:


12

小牛将标签保存为扩展属性

现在解除了NDA:Mavericks将标签保存为扩展属性,位于中com.apple.metadata:_kMDItemUserTags。您可以使用mdls命令自己检查它们,如下所示:

mdls -name kMDItemUserTags您好

John Siracusa对OS X 10.9进行的史诗般的回顾详细描述了标签体系结构


3
以及如何存储扩展属性?
occulus

1

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


1
例如,如果我创建一个名为“ Financial”的标签,颜色为红色,扩展属性plist会存储“ Financial”还是“ Red”?在名称和颜色之间如何进行映射?
Vaddadi Kartick

“在OS X中未使用将值加1的标志。” 这是什么意思?
Nicolas Barbulesco,2015年

这个答案很详细。但是颜色和标签之间的区别尚不清楚。
Nicolas Barbulesco,2015年

扩展属性存储在哪里?
Nicolas Barbulesco,2015年

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可以原生查看。没什么大不了的,但是有人需要编写一个实用程序来做到这一点。


1
很奇怪,groups.google.com / d / msg / openmeta / DK4Of2QGkpM / KIK9VKaCQdkJ是Google为该帖子提供的链接,但是在该链接之后有时无法透露所需的帖子。
格雷厄姆·佩林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.