Como o Finder do Mavericks armazena tags?

11

Eu ainda não usei o Mavericks.
O finder armazena tags no próprio arquivo (ex: xmp) ou é alimentado por algum tipo de banco de dados? ou o que?

    
por Kevin Grace 15.09.2013 / 23:30

3 respostas

10

Mavericks salva tags como atributo estendido

Agora que o NDA é suspenso: o Mavericks salva tags como um atributo estendido , em com.apple.metadata:_kMDItemUserTags . Você mesmo pode verificá-las usando o mdls assim:

mdls -name kMDItemUserTags Hello

A revisão épica de John Siracusa sobre o OS X 10.9 descreve a arquitetura de tags com algum detalhe.

    
por 27.10.2013 / 06:32
1
Até onde pude ler na internet, de várias fontes, é muito provável que o Mavericks armazene informações de tags como algo realmente próximo da estratégia OpenMeta no próprio arquivo. Até agora nós já tínhamos tags e tínhamos vários aplicativos ajudando nisso, como o Leap / Yep, por exemplo. Mas foi apenas uma prática recomendada consolidada acima de uma camada inferior padrão - OpenMeta. Agora o Mavericks quer dar um passo adiante fazendo as tags (e como elas devem ser codificadas no sistema de arquivos) oficiais. As tags Plus terão um conjunto fixo de cores (7?) E isso também ajudará a dividir tags em conjuntos para transportar semântica extra. Muitos de nós acham que isso pode ser um enorme passo à frente na visão do sistema de arquivos de um grande líder da indústria para eventualmente direcionar futuras escolhas (os aplicativos dependerão mais disso e talvez o próprio Mac OS espere algumas anotações especiais do sistema). Por uma questão de detalhes, o OpenMeta quer que os metadados sejam descritos como xattr (atributos estendidos) de arquivos, de modo que seja algo que o próprio sistema de arquivos não se importará porque está fora de seu escopo.

A pergunta era bem antiga e Mavericks vai virar o GM muito em breve. Então, apesar do fato de que existem apenas informações relacionadas ao domínio Beta, é razoavelmente verdade o que eu disse acima. Existem várias discussões na Internet sobre este tópico e uma em particular está aqui:

link

A parte mais interessante é:

The Apple tags are implemented in the same way that OpenMeta tags are - as extended attributes attached to the files in the filesystem. The only difference is that the attribute name is _kMDItemUserTags instead of kMDItemOMUserTags (the "OM" in the latter tag is for "OpenMeta"). The tag data for both Mavericks tags and OpenMeta tags are property lists, but I didn't look at the internal format of the plists so I don't know if they're exactly the same or not. I also don't know what, if any, auxiliary storage or alternate methods are used for non-HFS+ disk formats - I know Apple's hype said you could tag files on iCloud too, so there may be some issue there.

The long and the short of it, however, is that at least on local Mac disks, the OpenMeta tag data will need to be migrated to the new _kMDItemUserTags attribute in order to be seen natively by Maverick. Not a big deal, but someone needs to write a utility to do that.

    
por 04.10.2013 / 12:20
1

As tags são armazenadas em um atributo estendido denominado com.apple.metadata: _kMDItemUserTags. Seu valor é uma lista de propriedades binárias que contém um único array de 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>

As tags para cores têm valores como Red\n6 (onde \n é um avanço de linha).

Você pode usar o xattr para copiar as tags de um arquivo para outro:

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

Se o sinalizador kColor em com.apple.FinderInfo não estiver definido, o Finder não mostrará os círculos de cores ao lado dos arquivos. Se o sinalizador kColor estiver definido como laranja e o arquivo tiver a marca vermelha, o Finder mostrará os círculos vermelho e laranja. Você pode definir o sinalizador kColor com o 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")' é sintaxe plist de estilo antigo para isso:

<?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 imprime o valor dos bits usados para o sinalizador kColor. Vermelho é C, laranja é E, amarelo é A, verde é 4, azul é 8, magenta é 6 e cinza é 2. A bandeira que adicionaria 1 aos valores não é usada no OS X.

    
por 25.10.2013 / 17:35