2010-03-12 18 views

Respuesta

8

Este script toma el nombre del archivo o carpeta como primer argumento y el índice de etiqueta (0 para sin etiqueta, 1 para rojo, ..., 7 para gris) como segundo argumento.

#!/bin/sh 
osascript -e "tell application \"Finder\" to set label index of alias POSIX file \"`cd -P -- "$(dirname -- "$1")" && printf '%s\n' "$(pwd -P)/$(basename -- "$1")"`\" to $2" 

Más directamente, si $ nombre de archivo es una variable shell con el nombre de ruta absoluta del archivo o carpeta para ser etiquetados y $ etiqueta es una variable de shell con el número de índice etiqueta,

osascript -e "tell application \"Finder\" to set label index of alias POSIX file \"$filename\" to $label" 

es un comando de shell para asignar la etiqueta al archivo o carpeta.

+0

Esto fallará si el nombre de archivo contiene comillas dobles o termina con una barra invertida. –

+0

@Kevin: ¿Alguna solución para eso? – Svish

+0

@Kevin: Además ... ¿por qué tendría un nombre de archivo que contiene comillas dobles? Pensé que no era válido ...o tal vez solo en Windows ... – Svish

4

Sobre la base de las respuestas aquí y en los puestos mencionados, hice la siguiente función y añadido a mi ~/.bash_profile archivo:

# Set Finder label color 
label(){ 
    if [ $# -lt 2 ]; then 
    echo "USAGE: label [0-7] file1 [file2] ..." 
    echo "Sets the Finder label (color) for files" 
    echo "Default colors:" 
    echo " 0 No color" 
    echo " 1 Orange" 
    echo " 2 Red" 
    echo " 3 Yellow" 
    echo " 4 Blue" 
    echo " 5 Purple" 
    echo " 6 Green" 
    echo " 7 Gray" 
    else 
    osascript - "[email protected]" << EOF 
    on run argv 
     set labelIndex to (item 1 of argv as number) 
     repeat with i from 2 to (count of argv) 
      tell application "Finder" 
       set theFile to POSIX file (item i of argv) as alias 
       set label index of theFile to labelIndex 
      end tell 
     end repeat 
    end run 
EOF 
    fi 
} 
1

También existe la herramienta de línea de comandos 'setLabel' en el paquete osxutils. No requiere AppleScript ni que el Finder se esté ejecutando.

0

Esto usaría el mismo orden para los colores que el Finder.

#!/bin/bash 

if [[ $# -le 1 || ! "$1" =~ ^[0-7]$ ]]; then 
    echo "Usage: labelfile ..." 1>&2 
    exit 1 
fi 

colors=(0 2 1 3 6 4 5 7) 
n=${colors[$1]} 
shift 

osascript - "[email protected]" <<END > /dev/null 2>&1 
on run arguments 
tell application "Finder" 
repeat with f in arguments 
set f to (posix file (contents of f) as alias) 
set label index of f to $n 
end repeat 
end tell 
end 
END 

estoy redirigir STDERR, porque me dieron advertencias como 2012-09-06 13:50:00.965 osascript[45254:707] CFURLGetFSRef was passed this URL which has no scheme (the URL may not work with other CFURL routines): test.txt en 10.8. STDOUT se redirige porque osascript imprime el valor de la última expresión.

8

Aquí hay un script en Python rápida escribí:

https://github.com/danthedeckie/finder_colors

que establece los colores de las carpetas y archivos desde la línea de comandos.

Uso:

finder_colors.py red /Users/daniel/src 

establece el directorio/Usuarios/Daniel/src a ser de color rojo.

finder_colors.py /Users/daniel/src 

devuelve el color (en este caso ahora, 'rojo'). Si está escribiendo una secuencia de comandos python, puede importar finder_colors como un módulo y usarlo directamente (finder_colors.get (...) y finder_colors.set (...).

+0

Ayudaría más si explica cómo lo hace, por ejemplo, mediante ejemplos de código relevantes de su solución. – Pfitz

+0

Gracias @Pfitz - He añadido información de uso. La forma en que funciona internamente es utilizar una biblioteca incorporada de python para editar los atributos extendidos del archivo. No pude encontrar una forma elegante de creación de scripts nativos para hacer esto, y no me gusta la manzana- soluciones de script. – Daniel

Cuestiones relacionadas