Un modo per impostare / aggiungere tag su un file con Applescript sotto Mavericks?

9

Sto cercando di spostare alcuni dei miei script dalle etichette ai tag sotto Mavericks, ma non riesco a trovare un modo per impostare / aggiungere tag con Applescript.

Chiunque sappia come farlo? Per quanto posso capire i tag non sono in realtà nuovi, solo nuovi in termini di essere una parte più centrale del Finder aggiornato.

    
posta Christian A. Strømmen 23.10.2013 - 01:31
fonte

2 risposte

7

Puoi usare xattr. Copia i tag da file1 a file2:

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

I tag sono memorizzati in un elenco di proprietà come una singola matrice di stringhe:

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

I tag per i colori hanno valori come Red\n6 (dove \n è un avanzamento riga).

Se il flag kColor in com.apple.FinderInfo non è impostato, Finder non mostra le cerchie per i colori accanto ai file. Se il flag kColor è impostato su arancione e il file ha il tag rosso, Finder mostra sia cerchi rossi che arancioni. Puoi impostare il flag kColor con 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")' è sintassi plist vecchio stile per questo:

<?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 stampa il valore dei bit usati per il flag kColor. Rosso è C, arancione è E, giallo è A, verde è 4, blu è 8, magenta è 6 e grigio è 2. (La bandiera che aggiungerebbe 1 ai valori non è usata in OS X.)

    
risposta data 25.10.2013 - 19:03
fonte
1

La risposta è stata pubblicata nell'elenco degli utenti di Applescript:

link

citazione dal codice pagina scritto da Shane Stanley

You can do it easily enough with AppleScriptObjC. Here's are handlers to retrieve tags, set tags, and add tags:

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:

If you save it them in a script library, you can also use them from Mavericks.

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

    
risposta data 23.01.2015 - 13:22
fonte

Leggi altre domande sui tag