Как Mavericks's Finder хранит теги?

7268
Kevin Grace

Я еще не использовал Маверикс.
Хранит ли Finder теги в самом файле (например, xmp) или он работает на базе какой-либо базы данных? или что?

11
Вы можете попробовать его, прежде чем задать вопрос о OS X Maverick. Ramhound 11 лет назад 0
Обратите внимание, что подход Mavericks к тегированию в файловой системе не ограничивался Finder. Graham Perrin 9 лет назад 0

3 ответа на вопрос

10
Dan

Mavericks saves tags as extended attribute

Now that the NDA is lifted: Mavericks saves tags as an extended attribute, in com.apple.metadata:_kMDItemUserTags. You can check them yourself by using the mdls command like this:

mdls -name kMDItemUserTags Hello

John Siracusa's epic review of OS X 10.9 describes the tag architecture in some detail.

И как хранятся расширенные атрибуты? occulus 10 лет назад 3
1
Diego

Насколько я мог прочитать в Интернете, из нескольких источников, очень вероятно, что Mavericks будет хранить информацию о тегах как нечто очень близкое к стратегии OpenMeta в самом файле. До сих пор у нас уже были теги, и у нас было несколько приложений, помогающих в этом, например, в Leap / Yep. Но это была просто лучшая практика, объединенная выше стандартного нижнего уровня - OpenMeta. Теперь Mavericks хочет сделать шаг вперед, сделав теги (и как они должны быть закодированы в файловой системе) официальными. Теги Plus будут иметь фиксированный набор цветов (7?), И это может дополнительно помочь расщеплению тегов в наборах для обеспечения дополнительной семантики. Многие из нас думают, что это может стать огромным шагом вперед в видении крупного лидера отрасли в файловой системе, чтобы в конечном итоге сделать выбор в будущем (приложения будут в большей степени полагаться на это, и, возможно, сам Mac будет ожидать некоторых специальных системных аннотаций). Ради подробностей, OpenMeta хочет, чтобы метаданные были описаны как xattr (расширенные атрибуты) файлов, так что это то, о чем сама файловая система не будет заботиться из-за своей области видимости.

Вопрос был на самом деле довольно старым, и Mavericks очень скоро превратится в GM. Так что, несмотря на то, что есть только информация, относящаяся к домену бета-версии, вполне справедливо все, что я сказал выше. В Интернете происходит несколько дискуссий на эту тему, и одна из них здесь:

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

Самая интересная часть:

Теги Apple реализованы так же, как теги OpenMeta - как расширенные атрибуты, прикрепленные к файлам в файловой системе. Единственное отличие состоит в том, что имя атрибута - это _kMDItemUserTags вместо kMDItemOMUserTags («OM» в последнем теге означает «OpenMeta»). Данные тегов как для тегов Mavericks, так и для тегов OpenMeta являются списками свойств, но я не смотрел на внутренний формат списков, поэтому не знаю, точно ли они совпадают или нет. Я также не знаю, что, если таковые имеются, вспомогательное хранилище или альтернативные методы используются для дисковых форматов, отличных от HFS + - я знаю, что компания Apple сказала, что вы также можете помечать файлы в iCloud, так что там могут быть некоторые проблемы.

Суть и недостаток, однако, в том, что, по крайней мере, на локальных дисках Mac данные тега OpenMeta должны быть перенесены в новый атрибут _kMDItemUserTags, чтобы Maverick мог их видеть. Ничего страшного, но кто-то должен написать утилиту для этого.

Странно, https://groups.google.com/d/msg/openmeta/DK4Of2QGkpM/KIK9VKaCQdkJ - это ссылка, предоставленная Google для публикации, но при переходе по этой ссылке иногда не удается раскрыть требуемую запись. Graham Perrin 9 лет назад 1
1
user495470

Tags are stored in an extended attribute named com.apple.metadata:_kMDItemUserTags. Its value is a binary property list that contains a single array of strings:

$ 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> 

The tags for colors have values like Red\n6 (where \n is a linefeed).

You can use xattr to copy the tags from one file to another:

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 

If the kColor flag in com.apple.FinderInfo is unset, Finder doesn't show the circles for colors next to files. If the kColor flag is set to orange and the file has the red tag, Finder shows both red and orange circles. You can set the kColor flag with AppleScript:

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 ' 

'("Red\n6","new tag")' is old-style plist syntax for this:

<?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 prints the value of the bits used for the kColor flag. Red is C, orange is E, yellow is A, green is 4, blue is 8, magenta is 6, and gray is 2. The flag that would add 1 to the values is not used in OS X.

Если я создаю тег с именем «Финансовый», окрашенный в красный цвет, например, хранится ли в расширенном атрибуте plist «Финансовый» или «Красный»? И как выполняется сопоставление между именем и цветом? Vaddadi Kartick 9 лет назад 1
«Флаг, который добавил бы 1 к значениям, не используется в OS X». Что это значит? Nicolas Barbulesco 9 лет назад 0
Этот ответ является подробным. Но разница между цветами и тегами не ясна. Nicolas Barbulesco 9 лет назад 0
И где хранится этот расширенный атрибут? Nicolas Barbulesco 9 лет назад 0