2010-03-12 5 views

Répondre

8

Ce script shell prend le nom de fichier ou dossier comme premier argument et l'indice de l'étiquette (0 pour pas d'étiquette, 1 pour le rouge, ..., 7 pour le gris) comme deuxième argument.

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

Plus directement, si le nom de fichier de $ est une variable shell avec le nom de chemin absolu du fichier ou le dossier à étiqueter et l'étiquette $ est une variable shell avec le numéro d'index d'étiquettes,

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

est une commande shell pour affecter l'étiquette au fichier ou au dossier.

+0

Ceci échouera si le nom de fichier contient des guillemets doubles ou se termine par une barre oblique inverse –

+0

@Kevin: Toute solution à cela? – Svish

+0

@Kevin: Aussi ... pourquoi auriez-vous un nom de fichier contenant des guillemets doubles? Je pensais que c'était invalide ...ou peut-être seulement sous Windows ... – Svish

4

Sur la base des réponses ici et dans les postes mentionnés, je fait la fonction suivante et ajouté à mon ~/.bash_profile fichier:

# 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

Il y a aussi l'outil de ligne de commande « setLabel » dans le paquet osxutils. Il ne nécessite pas AppleScript ou que le Finder soit en cours d'exécution.

0

Ceci utiliserait le même ordre pour les couleurs que 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 

Je redirigeant STDERR, parce que je suis arrivé avertissements comme 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 sur 10,8. STDOUT est redirigé parce qu'osascript imprime la valeur de la dernière expression.

8

Voici un script python rapide je l'ai écrit:

https://github.com/danthedeckie/finder_colors

qui fixe les couleurs des dossiers et des fichiers de la ligne de commande.

Utilisation:

finder_colors.py red /Users/daniel/src 

définit le répertoire/Users/répertoire daniel/src être rouge.

finder_colors.py /Users/daniel/src 

renvoie la couleur (dans ce cas, 'rouge'). Si vous écrivez un script python, vous pouvez importer finder_colors en tant que module, et l'utiliser directement (finder_colors.get (...), et finder_colors.set (...).

+0

Si vous nous expliquez comment vous le faites, par exemple via des exemples de code pertinents de votre solution, cela vous aiderait davantage – Pfitz

+0

Merci @Pfitz - J'ai ajouté La façon dont cela fonctionne en interne consiste à utiliser une bibliothèque python intégrée pour éditer les attributs étendus du fichier Je ne trouvais pas de manière élégante et élégante de script shell natif pour le faire, et je n'aime pas la pomme. solutions de script. – Daniel

Questions connexes