Saltar al contenido

Apple: ¿es posible etiquetar una carpeta a través de una terminal?

Sé libre de compartir nuestra página y códigos con otro, danos de tu ayuda para hacer crecer nuestra comunidad.

Solución:

Puede usar xattr. Esto copia las etiquetas del archivo1 al 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 un array de cuerdas:

$ xattr -p com.apple.metadata:_kMDItemUserTags file3|xxd -r -p|plutil -convert xml1 - -o -




    Red
6
    new tag
    Orange
7
    Yellow
5
    Green
2
    Blue
4
    Purple
3
    Gray
1


Si la bandera kColor en com.apple.FinderInfo no está configurada, Finder no muestra los círculos para los colores. Si la bandera kColor está configurada en naranja y el archivo tiene la etiqueta roja, Finder muestra círculos rojos y naranjas. Puede configurar el indicador kColor con AppleScript:

xattr -w com.apple.metadata:_kMDItemUserTags '("Redn6","new tag")' ~/desktop/file4;osascript -e 'on run a' -e 'tell app "Finder" to set label index of (POSIX file a as alias) to item 1 of 2, 1, 3, 6, 4, 5, 7' -e end ~/desktop/file4

xattr -p com.apple.FinderInfo file|head -n1|cut -c28-29 imprime el valor de los bits utilizados para la bandera 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.

Editar: también puede usar la etiqueta:

tag -l file # list
tag -a tag1 file # add
tag -s red,blue file # set
tag -r * file # remove all tags
tag -f green # find all files with the green tag
tag -f * # find all files with tags
tag -m red * # match (print files in * that have the red tag)

la etiqueta se puede instalar con brew install tag o sudo port install tag.

$ tag -h
tag - A tool for manipulating and querying file tags.
  usage:
    tag -a | --add  ...     Add tags to file
    tag -r | --remove  ...  Remove tags from file
    tag -s | --set  ...     Set tags on file
    tag -m | --match  ...   Display files with matching tags
    tag -l | --list ...           List the tags on file
    tag -f | --find               Find all files with tags
   is a comma-separated list of tag names; use * to match/find any tag.
  additional options:
        -v | --version      Display version
        -h | --help         Display this help
        -n | --name         Turn on filename display in output (default)
        -N | --no-name      Turn off filename display in output (list)
        -t | --tags         Turn on tags display in output (find, match)
        -T | --no-tags      Turn off tags display in output (list)
        -g | --garrulous    Display tags each on own line (list, find, match)
        -G | --no-garrulous Display tags comma-separated after filename (default)
        -H | --home         Find tagged files only in user home directory
        -L | --local        Find tagged files only in home + local filesystems (default)
        -R | --network      Find tagged files in home + local + network filesystems
        -0 | --nul          Terminate lines with NUL () for use with xargs -0

Es posible manipular etiquetas a través de comandos bash puros. No es necesario utilizar una “etiqueta” de terceros.

Este comando enumera todas las etiquetas de un archivo ($ src):

xattr -px com.apple.metadata:_kMDItemUserTags "$src" | 
    xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' 'n'

Y así es como puede agregar una etiqueta ($ newtag) a un archivo ($ src):

xattr -wx com.apple.metadata:_kMDItemUserTags 
    "$(xattr -px com.apple.metadata:_kMDItemUserTags "$src" | 
    xxd -r -p - - | plutil -convert json -o - - | sed 's/[][]//g' | tr ',' 'n' | 
    (cat -; echo "$newtag") | sort -u | grep . | tr 'n' ',' | sed 's/,$//' | 
    sed 's/(.*)/[1]/' | plutil -convert binary1 -o - - | xxd -p - -)" "$src"

Aquí hay un pequeño script de shell que exporta una función de “etiquetas”. Uso:

tags 
Lists all tags of a file

tags -add  
Adds tag to a file

La función podría ampliarse fácilmente para admitir la eliminación también.

tags()  $add 
export -f tags

Recuerda dar recomendación a esta división si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *