¿Alguna forma de establecer / agregar etiquetas en un archivo con Applescript bajo Mavericks?

9

Intento mover algunos de mis scripts de etiquetas a etiquetas debajo de Mavericks, pero parece que no puedo encontrar una manera de establecer / agregar etiquetas con Applescript.

¿Alguien que sepa hacer esto? En la medida en que puedo imaginar que las etiquetas no son realmente nuevas, solo son nuevas en términos de ser una parte más central del Buscador actualizado.

    
pregunta Christian A. Strømmen 23.10.2013 - 01:31

2 respuestas

7

Puedes usar xattr. Esto 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 única 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 para los colores tienen valores como Red\n6 (donde \n es un salto de línea).

Si el indicador kColor en com.apple.FinderInfo no está configurado, el Finder no muestra los círculos de colores junto a los archivos. Si el indicador kColor se establece en naranja y el archivo tiene la etiqueta roja, el Finder muestra círculos rojos y naranjas. Puede establecer el indicador 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")' es sintaxis de plist de estilo antiguo para esto:

<?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 el indicador kColor. El rojo es C, el naranja es E, el amarillo es A, el verde es 4, el azul es 8, el magenta es 6 y el gris es 2. (La bandera que agregaría 1 a los valores no se usa en OS X).

    
respondido por el user495470 25.10.2013 - 19:03
1

La respuesta se ha publicado en la lista de usuarios de Applescript:

enlace

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

  

Puedes hacerlo fácilmente con AppleScriptObjC. Aquí están los manejadores   para recuperar etiquetas, establecer 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 los guarda en una biblioteca de secuencias de comandos, también puede usarlos desde   Mavericks.

     

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

    
respondido por el brandelune 23.01.2015 - 13:22

Lea otras preguntas en las etiquetas