Question

On peut marquer des fichiers et des dossiers avec une couleur dans le Mac OS X Finder. Est-il possible de le faire à partir d'un script shell?

Était-ce utile?

La solution

Ce script tire le nom du fichier ou du dossier comme premier argument et l'index d'étiquettes (0 pour aucune étiquette, une pour le rouge, ..., 7 pour gris) comme second 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 à être étiqueté 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 sur le fichier ou le dossier.

Autres conseils

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

https://github.com/danthedeckie/finder_colors

qui définit les couleurs des dossiers et des fichiers en 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

retourne la couleur (dans ce cas maintenant, « 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 (...).

D'après les réponses ici et dans les postes mentionnés, j'ai fait la fonction suivante et ajouté à mon fichier ~/.bash_profile:

# 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 - "$@" << 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
}

Une façon laide à faire ce serait:

exec osascript <<\EOF
tell app "Finder"

    -- [...]
    -- selecting the file
    -- [...]

    -- 4 is Blue
    set label index of thisItem to 4
end tell

En fait le lancement d'un AppleScript qui utilise Finder pour définir la couleur.

Je suis les conseils de:

(couleur) http://www.macosxhints.com/article.php? histoire = 20070602122413306

(Shell) http://www.macosxhints.com/article.php? histoire = 20040617170055379

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

utiliserait le même ordre pour les couleurs que le Finder.

#!/bin/bash

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

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

osascript - "$@" <<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 que osascript imprime la valeur de la dernière expression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top