Come posso cambiare l'icona di un file o una cartella utilizzando il Terminale
-
16-10-2019 - |
Domanda
Come faccio a modificare o impostare l'icona di un file o una cartella, nel terminale, ho bisogno di usare un linguaggio di scripting?
Soluzione
Hai bisogno dei Developer Tools installati, quindi i seguenti lavori potrebbe. Questo prende la grafica in icon.png
e lo applica a 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.
Altri suggerimenti
Con il beneficio di diversi anni di senno di poi:
di user588 risposta e di koiyu risposta funzionano bene, ma si basano su utenze (Rez
, DeRez
, e SetFile
) che:
- non sono installati di default (che vengono prodotti sia con Xcode o le utilità sviluppatore della riga di comando)
- sono ora deprecato (
Rez
eDeRez
, perché si riferiscono al carbonio)
osxiconutils aspetto interessante, ma non verrà compilato più (a partire da OSX 10.10. 4) .
Per questo ho creato fileicon
, che dovrebbe il lavoro su una macchina incontaminata OSX (prerequisiti) ; si tratta di uno script Bash basata principalmente su xattr
, xxd
e uno script Python integrato che chiama cacao, per gentile concessione di utile questa risposta ??a >.
Permette Impostazione / rimuovere / estrarre le icone personalizzate per / da file o cartelle , anche per quanto riguarda i volumi APF su MacOS 10.13 (High Sierra).
È possibile installare come segue:
- Se hai installato Node.js, dal Registro di NPM , con
[sudo] npm install -g fileicon
- In caso contrario:
- la CLI come
fileicon
(questo link rimarrà corrente) . - renderlo eseguibile con
chmod +x fileicon
. - Move it o symlink in una cartella a vostra
$PATH
, come ad esempio/usr/local/bin
(richiedesudo
).
- la CLI come
Ecco le informazioni di utilizzo; Per informazioni complete, consultare la manuale :
$ 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
I quasi iniziato una taglia su questo, perché io non sono riuscito a cambiare l'icona di un cartella utilizzando @ Mankoff 's risposta . Ma ho trovato una soluzione.
Per l'icona della cartella cambiamento che non puntano Rez -append tmp.rsrc
alla cartella, ma un file Icon\r
speciale all'interno della cartella. Se non è stata impostata un'icona personalizzata per la cartella prima, il file probabilmente non esisterà, ma Rez
crea on-the-fly. L'eliminazione del file Icon\r
rimuoverà l'icona personalizzata, in modo da evitare incidenti è bene essere nascosto.
Queste sono le modifiche alla risposta del 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'
Oltre a Ruby, ecco una versione di 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
Python che pre-installato in Mac OS ha già PyObjC in modo da non è necessario installare alcun pacchetto.
setfileicon
(codice sorgente) , un'utility creata da Damien Bobillot.
Scarica il binario qui: http://maxao.free.fr/telechargements/setfileicon.gz
Dopo la decompressione del file, renderlo eseguibile:
chmod +x setfileicon
Quindi è possibile utilizzarlo come segue:
./setfileicon "my-icon.icns" "my-file-or-directory"
Ho un github progetto in cui creo AppleScript "gocce" dal [shell / bash , Python, perl, ruby, ecc script] che prendono percorsi di file come argomenti. Ho scritto questa funzione bash per cambiare l'icona di una cartella (perché fasci AppleScript sono cartelle con un'estensione .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'
}
Una volta definito, si chiama la funzione con 2 argomenti:
replace_icon /path/to/AppleScript.app /path/to/icon.png
o
replace_icon /path/to/AppleScript.app http://i.imgur.com/LmUvWqB.png
Come si può vedere il secondo argomento può essere un'immagine sul vostro sistema, o un URL.
Nota: Questo pazzo cercando $'/Icon\r'
cosa che faccio è perché il nome delle estremità di file icona con un letterale \r
ritorno a capo. Guardate voi stessi con:
find my-applescript.app -maxdepth 1 | less -U
Supponendo che abbiamo già icns-file. Creare file di risorse temporaneo, che punti a icns-file:
$ echo "read 'icns' (-16455) \"Icon.icns\";" >> Icon.rsrc
Aggiungere il file di risorse come valore dell'attributo esteso "com.apple.ResourceFork" ad un file:
$ Rez -a Icon.rsrc -o FileName.ext
Mostra l'icona del file:
$ SetFile -a C FileName.ext
file di risorse Append come valore dell'attributo esteso "com.apple.ResourceFork" ad un magic file icona all'interno della cartella corrente:
$ Rez -a Icon.rsrc -o Icon$'\r'
Mostra l'icona della cartella corrente:
$ SetFile -a C .
Nascondere il magic file icona all'interno della cartella corrente (premere ?? per mostrare / nascondere file nascosti nel Finder.):
$ SetFile -a V Icon$'\r'
Ulteriori dettagli
Dati ??icona viene memorizzato come valore di attributo esteso "com.apple.ResourceFork" (comando del Terminale "xattr -p com.apple.ResourceFork filename.ext" stampa il valore). Per una cartella non c'è magia (che è vuoto e nascosto) Icon$'\r'
di file all'interno della cartella. Per estrarre i dati da icona di attributo esteso "com.apple.ResourceFork" in file di risorse di testo (da cui sappiamo corretto identificativo icns-tipo "-16455"):
$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc
sotto MacOS 10.13 comando High Sierra $ sips -i ImageFile.icns/png/jpg
genera l'errore "--addIcon non è più supportato". Interruttore significa "-i" "--addIcon" come attributo esteso "com.apple.ResourceFork" su questo file stesso utilizzando il contenuto di questo file immagine.
Un'altra opzione è quella di utilizzare MacRuby:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
È possibile scaricare un programma di installazione per MacRuby da http://macruby.org .
Stranamente la soluzione migliore sembra essere di non utilizzare propri strumenti di Apple, ma il codice Python, perché ha diversi vantaggi non essere limitato da:
- risoluzione del file di output
(Funziona fino a 1024x1024) - file di input in formato
(Provato con ICNS e PNG) - i permessi per installare
(Definirlo come funzione)
Aggiorna
Ora (su MacOS Sierra) @ di koiyu risposta sembra lavoro, quindi è possibile utilizzare questa due-liner per copiare l'icona da una cartella di origine alla cartella di destinazione:
#!/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
Nella versione ultimi MacOS (10.14), sips -i icon.png
otterrà un errore di --addIcon is no longer supported
.
E 'anche strumenti di sviluppo necessari installati. Questo prende la grafica in Icon.png
e lo applica a file.ext
, proprio come di user588 risposta :
# Covert Icon.png to tempicons.icns:
sips -s format icns Icon.png --out tmpicns.icns
# Create temp resource file which points to tempicons.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 tempicons.icns && rm tmpicns.rsrc