Existe-t-il une façon de définir l'étiquette de couleur d'un fichier à une certaine couleur dans le terminal?
Je sais que la commande suivante énumère quelques informations sur la couleur actuelle, mais je ne peux pas comprendre comment faire quelque chose. J'aime changer ça.
mdls -name kMDItemFSLabel somefile.ext
La raison pour laquelle je voudrais savoir, c'est que je veux marquer de façon récursive tous les fichiers dans un dossier d'un certain type avec une certaine étiquette de couleur (dans mon cas gris).
Je sais comment faire la découverte:
find . -name "*.ext"
Et je sais comment je peux exécuter la commande ensuite pour chaque fichier en utilisant -exec
, mais je dois savoir comment faire l'étiquetage réel …
Je voudrais une solution qui ne comporte que des commandes intégrées à Mac OS X. Donc, de préférence, aucun élément de tiers, à moins qu'il n'y ait pas d'autre moyen.
Sur la base des réponses ici et dans les messages référencés, j'ai fait la fonction suivante et l'ai ajouté à mon fichier ~ / .bash_profile:
# Couleur de l'étiquette Set Finder étiquette(){ Si [$ # -lt 2]; puis Echo "UTILISATION: étiquette [0-7] fichier1 [fichier2] ..." Echo "Définit l'étiquette Finder (couleur) pour les fichiers" Echo "Couleurs par défaut:" Echo "0 Pas de couleur" Écho "1 Orange" Echo "2 Red" Écho "3 jaune" Écho "4 Bleu" Écho "5 Violet" Écho "6 vert" Écho "7 Gris" autre Osascript - "$ @" << EOF En cours d'exécution argv Définissez labelIndex sur (élément 1 de argv en tant que numéro) Répétez avec i de 2 à (nombre d'argv) Dire à l'application "Finder" Définissez le fichier File to POSIX (item i of argv) comme alias Définir l'index de l'étiquette du fichier sur labelIndex Fin dicte Fin de la répétition moyen détourné EOF Fi }
>
Osascript -e "tell application \" Finder \ "pour définir l'index d'étiquette du fichier POSIX (\" / junk.txt \ ") à 1"
Les méthodes osascript semblent brisées dans Mavericks AppleScript, mais cela semble fonctionner:
xattr -wx com.apple.FinderInfo "0000000000000000000C00000000000000000000000000000000000000000000" /path/to/your/file
Sous Mavericks, cela semble fusionner l'étiquette du fichier avec le précédent (comme ils sont maintenant des "tags") et, de la même manière, je m'attends à ce que ce qui précède se brise à un moment donné si Apple arrête les attributs étendus usin de cette façon. Mais il a l'avantage de travailler pour moi maintenant et d'être beaucoup plus rapide que l'AS.
Voici ma version, basée sur les deux de @Lauri et @Robert. Vous spécifiez la couleur en utilisant le nom de la couleur, pas le numéro. Les noms de couleurs sont compatibles avec la sortie de hfsdata -L
, donc vous utilisez "None" pour ne pas attribuer de couleur au fichier. Enregistrez ceci dans un fichier appelé "setlabel" et faites chmod 755 setlabel
.
#!/bin/bash # Set Finder label color if [ $# -lt 2 ]; then echo "USAGE: setlabel color file1 [file2] ..." echo "Sets the Finder label (color) for files" echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray" else labelargs=$@ color=$1 file=$2 colorarray=( None Orange Red Yellow Blue Purple Green Gray ) colorvalue=8 for i in {0..7} do if [ "${color}" == ${colorarray[${i}]} ] then colorvalue=${i} fi done if [ "${colorvalue}" == "8" ] then echo Color ${color} is not recognized. echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray" else osascript - ${colorvalue} ${file} << EOF >/dev/null 2>&1 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 fi
Pour les afficher dans le Finder (je sais, pas ce que vous avez demandé), vous pouvez utiliser xattr -l, ou xattr -p com.apple.FinderInfo, vous obtenez un drapeau parmi les zéros (1E), dont les bits inférieurs sont les Couleur .. Avec des trucs de tiers: hfsdebug (utiliser avec sudo) pour obtenir beaucoup d'informations, parmi lesquelles une étiquette de couleur lisible.
Pour les modifier avec des éléments de la troisième partie: osxutils a une commande setlabel.
Cela utiliserait le même ordre pour les couleurs que 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 app "Finder" repeat with f in arguments set f to (posix file (contents of f) as alias) set label index of f to $n end end end END
Stderr est redirigé car la conversion d'un chemin relatif vers un alias entraîne un avertissement tel que CFURLGetFSRef a été passé cette URL qui n'a aucun schéma sur 10.8. Stdout est redirigé parce que osascript imprime la valeur de la dernière expression.
J'adore ces scripts, mais ils ne fonctionnaient pas pour mes fichiers qui utilisaient des espaces dans leurs noms jusqu'à ce que j'ai changé le paramètre IFS pour bash dans le script, j'ai également changé la saisie de fichier pour accepter un fichier texte avec une liste de noms de fichiers:
#!/bin/bash # Set Finder label color of files in a list # set the Internal Field Separator to \n (newline) IFS=$'\n' if [ $# -lt 2 ]; then echo "USAGE: LabelFilelist color Path/to/filelist ..." echo "Sets the Finder label (color) for files" echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray" else labelargs=$@ color=$1 file=`cat < $2` colorarray=( None Orange Red Yellow Blue Purple Green Gray ) colorvalue=8 for i in {0..7} do if [ "${color}" == ${colorarray[${i}]} ] then colorvalue=${i} fi done if [ "${colorvalue}" == "8" ] then echo Color ${color} is not recognized. echo "Possible colors: None Orange Red Yellow Blue Purple Green Gray" else osascript - ${colorvalue} ${file} << EOF >/dev/null 2>&1 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 fi
Voici deux articles décrivant comment faire cela en utilisant applescript, qui peut à son tour être invoqué à partir de la ligne de commande.
Comment définir l'étiquette de couleur via Terminal ou applescript
et
Marquage de fichiers avec des couleurs dans os-x finder à partir de scripts shell .