Marquer des fichiers avec des couleurs dans OS X Finder à partir de scripts shell
-
19-09-2019 - |
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?
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.