9 votos

Cualquier forma de ajustar/agregar etiquetas en un archivo con Applescript bajo Mavericks?

Tratando de mover a algunas de mis scripts de etiquetas para etiquetas debajo de los Mavericks, pero me parece que no puede encontrar una manera de ajustar/agregar etiquetas con Applescript.

Alguien que sabe cómo hacer esto? Tan lejos como puedo figura etiquetas en realidad no son nuevas, en términos de ser una parte central de la actualización del Buscador.

7voto

Fuzzy Purple Monkey Puntos 702

Usted puede utilizar xattr. Esta copia las etiquetas de archivo1 a archivo2:

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

Las etiquetas se almacenan en una lista de propiedades como una sola matriz de cadenas:

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

Las etiquetas de colores tienen valores como Red\n6 (donde \n es un salto de línea).

Si el kColor bandera en com.apple.FinderInfo no está definida, Finder no se muestran los círculos de colores junto a los archivos. Si el kColor bandera naranja y el archivo tiene la etiqueta roja, Buscador de muestra y rojo de los círculos de color naranja. Puede establecer el kColor bandera 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")' es de estilo antiguo plist sintaxis:

<?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 el valor de los bits utilizados para la kColor bandera. El rojo es C, la naranja es E, el amarillo, el verde es de 4, el azul es 8, el magenta es de 6, y el gris es 2. (El indicador de que se podría añadir de 1 a los valores no se utiliza en OS X.)

1voto

M Brown Puntos 128

La respuesta ha sido publicado en el Applescript lista de usuarios:

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


cita de la página de código escrito por Shane Stanley

Usted puede hacerlo fácilmente con AppleScriptObjC. Aquí están los controladores para recuperar las etiquetas, el conjunto de etiquetas, y agregar etiquetas:

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 se guarda en una biblioteca de secuencias de comandos, usted puede usar también en la de Mavericks.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X