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.