Comment puis-je modifier ou définir l'icône d'un fichier ou d'un dossier dans le terminal, dois-je utiliser un langage de script?
Comment puis-je modifier ou définir l'icône d'un fichier ou d'un dossier dans le terminal, dois-je utiliser un langage de script?
Réponses:
Vous aurez besoin des outils de développement installés, puis ce qui suit pourrait fonctionner. Cela prend le graphique icon.png
et l'applique à file.ext
.
# Take an image and make the image its own icon:
sips -i icon.png
# Extract the icon to its own resource file:
/Developer/Tools/DeRez -only icns icon.png > tmpicns.rsrc
# append this resource to the file you want to icon-ize.
/Developer/Tools/Rez -append tmpicns.rsrc -o file.ext
# Use the resource to set the icon.
/Developer/Tools/SetFile -a C file.ext
# clean up.
rm tmpicns.rsrc
# rm icon.png # probably want to keep this for re-use.
Rez -append
travailler avec des .avi
fichiers. ### Rez - Fatal error trying to open the resource file "Video.avi" for writing.
`des idées?
$PATH
(les bouts dans /usr/bin
qui savent où trouver les outils réels), et non /Developer/Tools
plus, vous devriez donc les invoquer juste par leurs noms de fichiers; c'est-à-dire, dans le cas présent, comme juste Rez
et DeRez
.
Avec le bénéfice de plusieurs années de recul:
La réponse de user588 et réponse koiyu travail bien, mais ils comptent sur les services publics ( Rez
, DeRez
et SetFile
) que:
Rez
et DeRez
, parce qu'ils sont liés au carbone)osxiconutils semble intéressant, mais ne compilera plus (à partir de OSX 10.10.4) .
J'ai donc créé CLIfileicon
, qui devrait fonctionner sur une machine OSX vierge (pas de prérequis) ; c'est un script Bash basé principalement sur xattr
, xxd
et un script Python incorporé qui appelle Cocoa, grâce à cette réponse utile .
Il permet de définir / supprimer / extraire des icônes personnalisées pour / à partir de fichiers ou de dossiers , y compris sur des volumes APFS sous macOS 10.13 (High Sierra).
Vous pouvez l'installer comme suit:
[sudo] npm install -g fileicon
fileicon
(ce lien restera à jour).chmod +x fileicon
.$PATH
, tel que /usr/local/bin
(requis sudo
).Voici les informations d'utilisation; pour des informations complètes, reportez-vous au manuel :
$ fileicon -h
Set a custom icon for a file or folder:
fileicon set <fileOrFolder> <imageFile>
Remove a custom icon from a file or folder:
fileicon rm <fileOrFolder>
Get a file or folder's custom icon:
fileicon get [-f] <fileOrFolder> [<iconOutputFile>]
Test if a file or folder has a custom icon:
fileicon test <fileOrFolder>
-q ... silence status output
Standard options: --help, --man, --version, --home
fileicon --man
).
curl -L http://git.io/n-install | bash
.
fileicon
, qui fonctionne toujours (et, en fait, a été créée, car osxiconutils
ne fonctionne plus) - j'ai mis à jour la réponse pour la rendre plus claire. .
Je presque commencé une prime sur ce point , parce que je ne l' ai pas réussi à changer l'icône d'un dossier en utilisant @ Mankoff de réponse . Mais j'ai trouvé une solution.
Pour changer l'icône du dossier, vous ne pointez pas Rez -append tmp.rsrc
sur le dossier mais sur un Icon\r
fichier spécial à l'intérieur du dossier. Si vous n'avez jamais défini d'icône personnalisée dans le dossier, le fichier n'existera probablement pas, mais Rez
il le crée à la volée. La suppression du Icon\r
fichier supprime l’icône personnalisée. Il est donc préférable d’être masqué pour éviter les accidents.
Voici les modifications apportées à la réponse de mankoff:
# Append a resource to the folder you want to icon-ize.
Rez -append tmpicns.rsrc -o $'myfolder/Icon\r'
# Use the resource to set the icon.
SetFile -a C myfolder/
# Hide the Icon\r file from Finder.
SetFile -a V $'myfolder/Icon\r'
En plus de Ruby, voici une version Python:
#!/usr/bin/env python
import Cocoa
import sys
Cocoa.NSWorkspace.sharedWorkspace().setIcon_forFile_options_(Cocoa.NSImage.alloc().initWithContentsOfFile_(sys.argv[1].decode('utf-8')), sys.argv[2].decode('utf-8'), 0) or sys.exit("Unable to set file icon")
./set-image.py image.png myfile
PyObjC est déjà préinstallé dans Python pré-installé sous Mac OS, vous n’aurez donc pas à installer de paquet.
Check out setfileicon
(code source) , un utilitaire créé par Damien Bobillot.
Téléchargez le binaire ici: http://maxao.free.fr/telechargements/setfileicon.gz
Après avoir décompressé le fichier, rendez-le exécutable:
chmod +x setfileicon
Ensuite, vous pouvez l'utiliser comme suit:
./setfileicon "my-icon.icns" "my-file-or-directory"
J'ai un projet github dans lequel je crée des "droplets" AppleScript à partir de scripts [shell / bash, python, perl, ruby, etc.] qui prennent les chemins de fichiers comme arguments. J'ai écrit cette fonction bash pour changer l'icône d'un dossier (car les ensembles AppleScript sont des dossiers avec une extension .app).
replace_icon(){
droplet="$1"
icon="$2"
if [[ "$icon" =~ ^https?:// ]]; then
curl -sLo /tmp/icon "$icon"
icon=/tmp/icon
fi
rm -rf "$droplet"$'/Icon\r'
sips -i "$icon" >/dev/null
DeRez -only icns "$icon" > /tmp/icns.rsrc
Rez -append /tmp/icns.rsrc -o "$droplet"$'/Icon\r'
SetFile -a C "$droplet"
SetFile -a V "$droplet"$'/Icon\r'
}
Une fois défini, vous appelez la fonction avec 2 arguments:
replace_icon /path/to/AppleScript.app /path/to/icon.png
ou
replace_icon /path/to/AppleScript.app http://i.imgur.com/LmUvWqB.png
Comme vous pouvez le voir, le deuxième argument peut être une image sur votre système ou une URL.
Remarque: cette $'/Icon\r'
chose folle à la recherche que je fais est parce que le nom du fichier Icon se termine par un retour chariot littéral\r
. Voyez vous-même avec:
find my-applescript.app -maxdepth 1 | less -U
En supposant que nous ayons déjà icns-file. Créez un fichier de ressources temporaire pointant vers icns-file:
$ echo "read 'icns' (-16455) \"Icon.icns\";" >> Icon.rsrc
Ajoutez le fichier de ressources en tant que valeur de l'attribut étendu "com.apple.ResourceFork" à un fichier:
$ Rez -a Icon.rsrc -o FileName.ext
Affiche l'icône du fichier:
$ SetFile -a C FileName.ext
Ajoutez le fichier de ressources en tant que valeur de l'attribut étendu "com.apple.ResourceFork" à un fichier d'icône magique dans le dossier actuel:
$ Rez -a Icon.rsrc -o Icon$'\r'
Afficher l'icône du dossier actuel:
$ SetFile -a C .
Masquer le fichier d'icône magique dans le dossier actuel (appuyez sur ⇧⌘. Pour afficher / masquer les fichiers cachés dans le Finder):
$ SetFile -a V Icon$'\r'
Les données d'icône sont stockées en tant que valeur de l'attribut étendu "com.apple.ResourceFork" (la commande du terminal "xattr -p com.apple.ResourceFork FileName.ext" imprime la valeur). Pour un dossier, il y a un fichier magique (vide et caché) Icon$'\r'
dans le dossier. Pour extraire les données d'icône de l'attribut étendu "com.apple.ResourceFork" dans un fichier de ressources en texte brut (à partir duquel nous connaissons le bon identificateur de type icns "-16455"):
$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc
Sous macOS 10.13, la commande High Sierra $ sips -i ImageFile.icns/png/jpg
génère l'erreur "--addIcon n'est plus pris en charge". Basculez "-i" signifie "--addIcon" en tant qu'attribut étendu "com.apple.ResourceFork" sur ce fichier lui-même en utilisant le contenu de ce fichier image.
Une autre option consiste à utiliser MacRuby:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
Vous pouvez télécharger un programme d'installation pour MacRuby à l' adresse http://macruby.org .
Curieusement, la meilleure solution semble ne pas utiliser les outils propres à Apple, mais le code Python, car il présente divers avantages, sans être limité par:
Mise à jour
Maintenant (sur macOS Sierra) La réponse de @ koiyu semble fonctionner, vous pouvez donc utiliser cette double couche pour copier l'icône d'un dossier source vers votre dossier de destination:
#!/bin/sh
DeRez -only icns $1/Icon$'\r' > icon.rsrc; Rez -a icon.rsrc -o $2/Icon$'\r'
SetFile -a C $2; SetFile -a V $2/Icon$'\r'; rm icon.rsrc
Dans la version récente de macOS (10.14), sips -i icon.png
une --addIcon is no longer supported
erreur se produira .
Les outils de développement doivent également être installés. Ceci utilise le graphique dans Icon.png
et l’applique à file.ext
, tout comme la réponse de user588 :
# Covert Icon.png to tmpicons.icns:
sips -s format icns Icon.png --out tmpicns.icns
# Create temporary resource file which points to tmpicons.icns:
echo "read 'icns' (-16455) \"tmpicns.icns\";" >> tmpicns.rsrc
# append this resource to the file you want to icon-ize.
Rez -a tmpicns.rsrc -o file.ext
# Use the resource to set the icon.
SetFile -a C file.ext
# Clean up
rm tmpicons.icns && rm tmpicns.rsrc
Tout comme la solution Python utilisant PyObjC, il s'avère que cela peut être fait uniquement avec AppleScript (qui n'est pas obsolète dans Catalina 10.15, contrairement à Python et à d'autres langages de script).
J'ai trouvé un exemple de comment faire cela sur GitHub ici:
#!/usr/bin/env osascript use framework "AppKit" -------------------------------------------------------------------------------- # PROPERTY DECLARATIONS: property this : a reference to current application property NSWorkspace : a reference to NSWorkspace of this property NSImage : a reference to NSImage of this -------------------------------------------------------------------------------- # IMPLEMENTATION: on run argv set icon to item 1 of argv set target to item 2 of argv setIcon to icon for target end run -------------------------------------------------------------------------------- # HANDLERS: to setIcon to iconPath for filePath set sharedWorkspace to NSWorkspace's sharedWorkspace() set newImage to NSImage's alloc() set icon to newImage's initWithContentsOfFile:iconPath set success to sharedWorkspace's setIcon:icon forFile:filePath options:0 end setIcon
AppleScript n'est pas facile à lire, mais il est apparemment possible d'accéder au code Objective-C via le framework AppKit.