Vous pouvez marquer des fichiers et des dossiers avec une couleur dans le Finder de Mac OS X. Existe-t-il un moyen de le faire à partir d'un script shell?Marquage de fichiers avec des couleurs dans OS X Finder à partir de scripts shell
Répondre
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.
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
lancement Fondamentalement un AppleScript qui utilise Finder pour définir la couleur.
J'ai obtenu les notes de:
(couleur) http://www.macosxhints.com/article.php?story=20070602122413306
(Shell) http://www.macosxhints.com/article.php?story=20040617170055379
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
}
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.
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.
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 (...).
Si vous nous expliquez comment vous le faites, par exemple via des exemples de code pertinents de votre solution, cela vous aiderait davantage – Pfitz
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
Ceci échouera si le nom de fichier contient des guillemets doubles ou se termine par une barre oblique inverse –
@Kevin: Toute solution à cela? – Svish
@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