Pregunta

¿Cómo puedo cambiar o ajustar el icono de un archivo o una carpeta, en la terminal, ¿tengo que usar un lenguaje de script?

¿Fue útil?

Solución

Usted necesitará las herramientas de desarrollo instaladas, y luego el siguiente trabajo fuerzas. Esto toma el gráfico en icon.png y lo aplica 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.

Otros consejos

Con el beneficio de varios años de retrospectiva:

de user588 respuesta y koiyu de respuesta trabajo bien, pero que dependen de los servicios públicos (Rez, DeRez y SetFile) que:

  • No se instalan por defecto (que vienen con Xcode o las utilidades de desarrollador de línea de comandos)
  • ahora están en desuso (Rez y DeRez, porque se relacionan con carbono)

osxiconutils aspecto interesante, pero no se compilará por más tiempo (a partir de OSX 10.10. 4) .


Por lo tanto, he creado fileicon , que debe trabajo en una máquina prístina OSX (ningún requisito previo) ; es un script Bash basado principalmente en xattr, xxd y un script en Python embebido que llama cacao, cortesía de esta respuesta es útil .

Permite configuración / eliminación / extracción de iconos personalizados para / desde archivos o carpetas , incluyendo en los volúmenes de APF en MacOS 10.13 (High Sierra).

Se puede instalar de la siguiente manera:

  • Si usted tiene que instalar Node.js, del registro NPM , con
    [sudo] npm install -g fileicon
  • De lo contrario:
    • la CLI como fileicon (este enlace permanecerá actual) .
    • hacerlo ejecutable con chmod +x fileicon.
    • Mover o enlace simbólico a una carpeta en su $PATH, como /usr/local/bin (requiere sudo).

Aquí está la información de uso; para obtener información completa, consulte la manual de :

$ 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

casi comenzado una recompensa por esto, porque no me las arreglo para cambiar el icono de un carpeta utilizando @ Mankoff 's respuesta . Pero he encontrado una solución.


Para cambiar el icono de carpeta que no lo hacen punto Rez -append tmp.rsrc a la carpeta, pero un archivo especial Icon\r dentro de la carpeta. Si no ha configurado un icono personalizado a la carpeta antes, el archivo probablemente no existirá, pero Rez crea en la marcha. Eliminar el archivo Icon\r eliminará el icono personalizado, por lo que para evitar accidentes, es bueno que se oculta.

Estas son las modificaciones a la respuesta de la 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'

Además de Ruby, aquí está una versión de 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 que pre-instalado en Mac OS ya tiene PyObjC por lo que no tiene que instalar ningún paquete.

setfileicon (código fuente) , una utilidad creada por Damien Bobillot.

Descargar el binaria aquí: http://maxao.free.fr/telechargements/setfileicon.gz

Después de descomprimir el archivo, que sea ejecutable:

chmod +x setfileicon

A continuación, se puede utilizar de la siguiente manera:

./setfileicon "my-icon.icns" "my-file-or-directory"

Suponiendo que tenemos icns-archivo ya. Crear archivo de recursos temporal que apunta a icns-file:

$ echo "read 'icns' (-16455) \"Icon.icns\";" >> Icon.rsrc

Anexar el archivo de recursos como valor del atributo extendido "com.apple.ResourceFork" a un archivo:

$ Rez -a Icon.rsrc -o FileName.ext

Mostrar el icono del archivo:

$ SetFile -a C FileName.ext

Anexar archivo de recursos como valor del atributo extendido "com.apple.ResourceFork" a un archivo de icono magia dentro de la carpeta actual:

$ Rez -a Icon.rsrc -o Icon$'\r'

Mostrar el icono de la carpeta actual:

$ SetFile -a C .

Ocultar el archivo de icono magia dentro de la carpeta actual (pulse ?? para mostrar los archivos / ocultado en Finder.):

$ SetFile -a V Icon$'\r'

Detalles adicionales

datos

icono se almacena como valor del atributo extendido "com.apple.ResourceFork" (comando de terminal "xattr -p com.apple.ResourceFork filename.ext" imprime el valor). Para una carpeta hay magia (que está vacío y oculto) Icon$'\r' archivo dentro de la carpeta. Para extraer icono de datos de atributo extendido "com.apple.ResourceFork" en un archivo de recursos de texto sin formato (de la que conocemos identificador de tipo icns correcta "-16455"):

$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc

Bajo MacOS 10.13 High Sierra $ sips -i ImageFile.icns/png/jpg comando genera error "--addIcon ya no es compatible". Interruptor de medios "i" "--addIcon" como atributo extendido "com.apple.ResourceFork" en este archivo sí mismo usando el contenido de este archivo de imagen.

Por extraño que parezca la mejor solución parece ser no utilizar las herramientas propias de Apple, pero el código Python, ya que tiene varias ventajas que no están limitados por:

  • resolución de archivo de salida
    (Funciona hasta 1024x1024)
  • formato de archivo de entrada
    (Tratado con ICNS y PNG)
  • permisos para instalar
    (Definirlo como una función)

Actualizar

Ahora (en MacOS Sierra) @ respuesta de koiyu parece que funciona, lo que podría utilizar este vehículo de dos forro para copiar el icono de una carpeta de origen a la carpeta de destino:

#!/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

In the recent macOS version (10.14), sips -i icon.png will get a --addIcon is no longer supported error.

It also needed Developer Tools installed. This takes the graphic in Icon.png and applies it to file.ext, just like user588's answer:

# 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a apple.stackexchange
scroll top