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


13

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


Возможно, вы захотите попробовать, прежде чем задать вопрос о OS X Maverick.
Ramhound

Обратите внимание, что подход Mavericks к тегированию в файловой системе не ограничивался Finder.
Грэм Перрин

Ответы:


12

Mavericks сохраняет теги как расширенный атрибут

Теперь, когда NDA отменено: Mavericks сохраняет теги как расширенный атрибут в com.apple.metadata:_kMDItemUserTags. Вы можете проверить их самостоятельно, используя команду mdls следующим образом:

mdls -name kMDItemUserTags Привет

В эпическом обзоре Джона Сиракузы по 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

Если флаг kColor в com.apple.FinderInfo не установлен, Finder не показывает круги для цветов рядом с файлами. Если флаг kColor установлен в оранжевый цвет, а файл имеет красную метку, Finder отображает как красные, так и оранжевые кружки. Вы можете установить флаг kColor с помощью 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 {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. Флаг, который добавил бы 1 к значениям, не используется в OS X.


1
Если я создаю тег с именем «Финансовый», окрашенный в красный цвет, например, хранится ли в расширенном атрибуте plist «Финансовый» или «Красный»? И как выполняется сопоставление между именем и цветом?
Ваддади Картик

«Флаг, который добавил бы 1 к значениям, не используется в OS X». Что это значит?
Николас Барбулеско

Этот ответ является подробным. Но разница между цветами и метками не ясна.
Николас Барбулеско

И где хранится этот расширенный атрибут?
Николас Барбулеско

1

Насколько я мог прочитать в Интернете, из нескольких источников, очень вероятно, что 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 мог видеть их изначально. Ничего страшного, но кто-то должен написать утилиту для этого.


1
Странно, groups.google.com/d/msg/openmeta/DK4Of2QGkpM/KIK9VKaCQdkJ - это ссылка, предоставленная Google для публикации, но при переходе по этой ссылке иногда не удается раскрыть требуемую запись.
Грэм Перрин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.