Я еще не использовал Маверикс.
Хранит ли Finder теги в самом файле (например, xmp), или он работает на какой-то базе данных? или что?
Я еще не использовал Маверикс.
Хранит ли Finder теги в самом файле (например, xmp), или он работает на какой-то базе данных? или что?
Ответы:
Теперь, когда NDA отменено: Mavericks сохраняет теги как расширенный атрибут в com.apple.metadata:_kMDItemUserTags
. Вы можете проверить их самостоятельно, используя команду mdls следующим образом:
mdls -name kMDItemUserTags Привет
В эпическом обзоре Джона Сиракузы по OS X 10.9 подробно описана архитектура тегов .
Теги хранятся в расширенном атрибуте с именем 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.
Насколько я мог прочитать в Интернете, из нескольких источников, очень вероятно, что 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 мог видеть их изначально. Ничего страшного, но кто-то должен написать утилиту для этого.