¿Cómo puedo cambiar o configurar el icono de un archivo o carpeta, en el terminal, ¿necesito usar un lenguaje de script?
script
icon
command-line
ocodo
fuente
fuente
Respuestas:
Necesitará las herramientas de desarrollador instaladas, y luego lo siguiente podría funcionar. Esto toma el gráfico
icon.png
y lo aplicafile.ext
.fuente
Rez -append
cuando trabajo con.avi
archivos.### Rez - Fatal error trying to open the resource file "Video.avi" for writing.
`alguna idea?$PATH
(stubs en/usr/bin
que saben dónde encontrar las herramientas reales), y ya no están/Developer/Tools
, por lo que debe invocarlas solo por sus nombres de archivo; es decir, en el caso en cuestión, como justRez
yDeRez
.Con el beneficio de varios años de retrospectiva:
La respuesta de user588 y la respuesta de koiyu trabajo bien, pero que dependen de los servicios públicos (
Rez
,DeRez
ySetFile
) que:Rez
yDeRez
, porque se relacionan con el carbono)osxiconutils parece interesante, pero ya no se compilará (a partir de OSX 10.10.4) .
Por lo tanto, he creado CLI
fileicon
, que debería funcionar en una máquina OSX prístina (sin requisitos previos) ; es una secuencia de comandos Bash basada principalmente enxattr
,xxd
y una secuencia de comandos de Python incrustado que llama cacao, la cortesía de esta respuesta es útil .Permite configurar / eliminar / extraer iconos personalizados para / de archivos o carpetas , incluso en volúmenes APFS en macOS 10.13 (High Sierra).
Puede instalarlo de la siguiente manera:
[sudo] npm install -g fileicon
fileicon
(este enlace se mantendrá actualizado).chmod +x fileicon
.$PATH
, como/usr/local/bin
(requieresudo
).Aquí está la información de uso; Para obtener información completa, consulte el manual :
fuente
fileicon --man
).curl -L http://git.io/n-install | bash
.fileicon
, que todavía funciona (y, de hecho, fue creada, porqueosxiconutils
ya no funciona). He actualizado la respuesta para aclarar eso. .Yo casi empecé una recompensa por esto, porque no he podido cambiar el icono de una carpeta usando @ Mankoff 's respuesta . Pero encontré una solución.
Para cambiar el icono de la carpeta, no apunta
Rez -append tmp.rsrc
a la carpeta sino a unIcon\r
archivo especial dentro de la carpeta. Si no ha establecido un ícono personalizado en la carpeta antes, el archivo probablemente no existirá, pero loRez
crea sobre la marcha. Al eliminar elIcon\r
archivo se eliminará el ícono personalizado, por lo que para evitar accidentes es bueno estar oculto.Estas son las modificaciones a la respuesta de mankoff:
fuente
Además de Ruby, aquí hay una versión de Python:
./set-image.py image.png myfile
Python preinstalado en Mac OS ya tiene PyObjC, por lo que no tiene que instalar ningún paquete.
fuente
Echa un vistazo
setfileicon
(código fuente) , una utilidad creada por Damien Bobillot.Descargue el binario aquí: http://maxao.free.fr/telechargements/setfileicon.gz
Después de descomprimir el archivo, hágalo ejecutable:
Entonces puede usarlo de la siguiente manera:
fuente
Tengo un proyecto github donde creo "gotitas" de AppleScript a partir de scripts [shell / bash, python, perl, ruby, etc.] que toman las rutas de los archivos como argumentos. Escribí esta función bash para cambiar el ícono de una carpeta (porque los paquetes AppleScript son carpetas con una extensión .app).
Una vez definido, llama a la función con 2 argumentos:
o
Como puede ver, el segundo argumento puede ser una imagen en su sistema o una URL.
NOTA: Esa
$'/Icon\r'
cosa de aspecto loco que hago es porque el nombre del archivo Icon termina con un retorno de carro literal\r
. Véalo usted mismo con:fuente
Asumiendo que ya tenemos el archivo icns. Cree un archivo de recursos temporales que apunte a icns-file:
Agregue el archivo de recursos como valor del atributo extendido "com.apple.ResourceFork" a un archivo:
Mostrar el icono del archivo:
Agregue el archivo de recursos como valor del atributo extendido "com.apple.ResourceFork" a un archivo de icono mágico dentro de la carpeta actual:
Mostrar el icono de la carpeta actual:
Oculte el archivo de icono mágico dentro de la carpeta actual (presione ⇧⌘. Para mostrar / ocultar archivos ocultos en Finder):
Detalles adicionales
Los datos del icono se almacenan como valor del atributo extendido "com.apple.ResourceFork" (el comando de terminal "xattr -p com.apple.ResourceFork FileName.ext" imprime el valor). Para una carpeta hay un archivo mágico (que está vacío y oculto)
Icon$'\r'
dentro de la carpeta. Para extraer datos del icono del atributo extendido "com.apple.ResourceFork" en un archivo de recursos de texto sin formato (del que conocemos el identificador de tipo icns correcto "-16455"):En macOS 10.13, el comando High Sierra
$ sips -i ImageFile.icns/png/jpg
genera el error "--addIcon ya no es compatible". El interruptor "-i" significa "--addIcon" como atributo extendido "com.apple.ResourceFork" en este archivo usando el contenido de este archivo de imagen.fuente
Otra opción es usar MacRuby:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
Puede descargar un instalador para MacRuby desde http://macruby.org .
fuente
Por extraño que parezca, la mejor solución parece ser no usar las propias herramientas de Apple sino el código Python porque tiene varias ventajas que no están limitadas por:
(funciona hasta 1024x1024)
(probado con ICNS y PNG)
(definirlo como una función)
Actualizar
Ahora (en macOS Sierra) la respuesta de @ koiyu parece funcionar, por lo que podría usar este dos líneas para copiar el icono de una carpeta de origen a su carpeta de destino:
fuente
En la versión reciente de macOS (10.14),
sips -i icon.png
obtendrá un--addIcon is no longer supported
error.También necesita herramientas de desarrollador instaladas. Esto usa el gráfico
Icon.png
y lo aplicafile.ext
, al igual que la respuesta del usuario588 :fuente
Al igual que la solución Python que usa PyObjC, resulta que solo se puede hacer con AppleScript (que no está en desuso en 10.15 Catalina, a diferencia de Python y otros lenguajes de secuencias de comandos).
Encontré un ejemplo de cómo hacer esto en GitHub aquí:
AppleScript no es fácil de leer, pero aparentemente es posible acceder al código Objective-C para hacerlo a través del marco de AppKit.
fuente