9 votes

Est-il possible de définir/ajouté des balises sur un fichier avec Applescript sous Mavericks ?

J'essaie de faire passer certains de mes scripts des étiquettes aux balises sous Mavericks, mais je n'arrive pas à trouver un moyen de définir/ajoutez des balises avec Applescript.

Quelqu'un sait-il comment faire ? D'après ce que je sais, les balises ne sont pas vraiment nouvelles, elles sont juste nouvelles en ce qu'elles constituent un élément plus central du Finder mis à jour.

7voto

Fuzzy Purple Monkey Points 702

Vous pouvez utiliser xattr. Ceci copie les balises du fichier1 vers le 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 tableau unique de chaînes de caractères :

$ 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 est désactivé, le Finder n'affiche pas les cercles de couleurs à côté des fichiers. Si l'indicateur kColor est défini sur orange et que le fichier a la 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")' est une syntaxe plist à l'ancienne pour cela :

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

1voto

Chrygore Points 939

La réponse a été publiée sur la liste des utilisateurs d'Applescript :

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


citation de la page- code écrit par Shane Stanley

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

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 script, vous pouvez également les utiliser à partir de Mavericks.

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X