¿Cómo puedo cambiar un icono de archivo o una carpeta mediante el Terminal
-
16-10-2019 - |
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?
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
yDeRez
, 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
(requieresudo
).
- la CLI como
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 ??strong> 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"
Tengo un href="http://github.com/RichardBronosky/AppleScript-droplet" rel="nofollow noreferrer"> github proyecto
Una vez definido, se llama a la función con 2 argumentos: o Como se puede ver el segundo argumento puede ser una imagen en su sistema, o una URL. Nota: Que loco buscando algo 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'
}
replace_icon /path/to/AppleScript.app /path/to/icon.png
replace_icon /path/to/AppleScript.app http://i.imgur.com/LmUvWqB.png
$'/Icon\r'
que hago es porque el nombre de los extremos archivo de icono con un literal carro \r
retorno. Ver por sí mismo con: find my-applescript.app -maxdepth 1 | less -U
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.
Otra opción es utilizar MacRuby:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
Se puede descargar un instalador para MacRuby de http://macruby.org .
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