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?

È stato utile?

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 e DeRez, 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 .

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 (richiede sudo).

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a apple.stackexchange
scroll top