12

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

3 ответа3

11

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

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

mdls -name kMDItemUserTags Привет

В эпическом обзоре Джона Сиракузы по OS X 10.9 подробно описывается архитектура тегов .

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

Насколько я мог прочитать в Интернете, из нескольких источников, очень вероятно, что Mavericks будет хранить информацию о тегах как нечто очень близкое к стратегии OpenMeta в самом файле. До сих пор у нас уже были теги, и у нас было несколько приложений, помогающих в этом, например, в Leap/Yep. Но это была просто лучшая практика, объединенная выше стандартного нижнего уровня - OpenMeta. Теперь Mavericks хочет сделать шаг вперед, сделав теги (и как они должны быть закодированы в файловой системе) официальными. Плюс теги будут иметь фиксированный набор цветов (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 мог их видеть. Ничего страшного, но кто-то должен написать утилиту для этого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .