2010-03-12 12 views

risposta

8

Questo script di shell prende il nome del file o della cartella come primo argomento e l'indice di etichetta (0 per nessuna etichetta, 1 per rosso, ..., 7 per grigio) come secondo argomento.

#!/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" 

Più direttamente, se $ nome è una variabile shell con il nome di percorso assoluto del file o cartelle da etichettare e $ etichetta è una variabile shell con il numero di indice etichetta,

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

è un comando shell per assegnare l'etichetta al file o alla cartella.

+0

Questo fallirà se il nome file contiene doppie virgolette o termina con una barra rovesciata. –

+0

@Kevin: Qualsiasi soluzione a questo? – Svish

+0

@Kevin: Inoltre ... perché dovresti avere un nome file contenente virgolette doppie? Ho pensato che non fosse valido ...o forse solo in Windows ... – Svish

4

Sulla base delle risposte qui e nei post di riferimento, ho fatto la seguente funzione e ha aggiunto al mio ~/.bash_profile lima:

# 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

C'è anche la linea di comando strumento 'setLabel' nel pacchetto osxutils. Non richiede AppleScript o che il Finder sia in esecuzione.

0

Questo userebbe lo stesso ordine per i colori come 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 

sto reindirizzando STDERR, perché ho avuto avvertimenti come 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 su 10,8. STDOUT viene reindirizzato perché osascript stampa il valore dell'ultima espressione.

8

Ecco uno script python rapida che ho scritto:

https://github.com/danthedeckie/finder_colors

che definisce i colori delle cartelle e file da linea di comando.

Usage:

finder_colors.py red /Users/daniel/src 

imposta la directory/Users/Daniel/src essere rosso.

finder_colors.py /Users/daniel/src 

restituisce il colore (in questo caso ora 'rosso'). Se stai scrivendo uno script python, puoi importare finder_colors come modulo e usarlo direttamente (finder_colors.get (...) e finder_colors.set (...).

+0

Sarebbe di aiuto se spiegassi come farlo ad esempio tramite esempi di codice rilevanti della tua soluzione – Pfitz

+0

Grazie a @Pfitz - Ho aggiunto informazioni di utilizzo.Il modo in cui funziona internamente è l'utilizzo di una libreria python integrata per modificare gli attributi estesi del file. Non ho trovato un elegante modo di script shell nativo per fare questo, e non mi piace la mela- soluzioni di script. – Daniel

Problemi correlati