Un moyen de définir / ajouter des tags sur un fichier avec Applescript sous Mavericks?

9

J'essaie de déplacer certains de mes scripts d'étiquettes en étiquettes sous Mavericks, mais je n'arrive pas à trouver le moyen de définir / ajouter des étiquettes avec Applescript.

Quelqu'un qui sait comment faire ça? Autant que je sache, les balises ne sont pas nouvelles, elles constituent simplement une partie plus centrale du Finder actualisé.

Christian A. Strømmen
la source

Réponses:

7

Vous pouvez utiliser xattr. Cela copie les balises de fichier1 à fichier2:

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

Les balises sont stockées dans une liste de propriétés sous la forme d'un seul tableau de chaînes:

$ 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>

Les balises pour les couleurs ont des valeurs comme Red\n6 (où \n est un saut de ligne).

Si l'indicateur kColor de com.apple.FinderInfo n'est pas défini, le Finder n'affiche pas les cercles des couleurs en regard des fichiers. Si l'indicateur kColor est défini sur orange et que le fichier comporte une balise rouge, le Finder affiche les cercles rouge et orange. Vous pouvez définir l'indicateur kColor avec AppleScript:

do shell script "xattr -w com.apple.metadata:_kMDItemUserTags '(\"Red\\n6\",\"new tag\")' ~/desktop/file4"
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")' La syntaxe de plist à l’ancienne est la suivante:

<?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 affiche la valeur des bits utilisés pour l'indicateur kColor. Le rouge est C, orange est E, jaune est A, vert est 4, bleu est 8, magenta est 6 et gris est 2. (Le drapeau qui ajouterait 1 aux valeurs n'est pas utilisé dans OS X).

Lri
la source
sont les "images de tag" .PNG ou graphismes en couleur? Impossible de trouver quelque chose comme "C.png" sur le disque dur :)
1

La réponse a été postée sur la liste d’utilisateurs d’Applescript:

http://lists.apple.com/archives/applescript-users/2015/Jan/msg00193.html


citation de page code écrit par Shane Stanley

Vous pouvez le faire assez facilement avec AppleScriptObjC. Voici les gestionnaires   pour récupérer des tags, définir des tags et en ajouter:

use scripting additions
use framework "Foundation"

on returnTagsFor:posixPath -- get the tags
    set aURL to current application's |NSURL|'s fileURLWithPath:posixPath -- make URL
    set {theResult, theTags} to aURL's getResourceValue:(reference) forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
    if theTags = missing value then return {} -- because when there are none, it returns missing value
    return theTags as list
end returnTagsFor:

on setTags:tagList forPath:posixPath -- set the tags, replacing any existing tags
    set aURL to current application's |NSURL|'s fileURLWithPath:posixPath -- make URL
    aURL's setResourceValue:tagList forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
end setTags:forPath:

on addTags:tagList forPath:posixPath -- add to existing tags
    set aURL to current application's |NSURL|'s fileURLWithPath:posixPath -- make URL
    -- get existing tags
    set {theResult, theTags} to aURL's getResourceValue:(reference) forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
    if theTags ≠ missing value then -- add new tags
        set tagList to (theTags as list) & tagList
        set tagList to (current application's NSOrderedSet's orderedSetWithArray:tagList)'s allObjects() -- delete any duplicates
    end if
    aURL's setResourceValue:tagList forKey:(current application's NSURLTagNamesKey) |error|:(missing value)
end addTags:forPath:

Si vous les enregistrez dans une bibliothèque de scripts, vous pouvez également les utiliser à partir de   Mavericks.

- Shane Stanley www.macosxautomation.com/applescript/apps/

brandelune
la source