¿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.pngy lo aplicafile.ext.fuente
Rez -appendcuando trabajo con.aviarchivos.### Rez - Fatal error trying to open the resource file "Video.avi" for writing.`alguna idea?$PATH(stubs en/usr/binque 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 justRezyDeRez.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,DeRezySetFile) que:RezyDeRez, 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,xxdy 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 fileiconfileicon(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, porqueosxiconutilsya 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.rsrca la carpeta sino a unIcon\rarchivo especial dentro de la carpeta. Si no ha establecido un ícono personalizado en la carpeta antes, el archivo probablemente no existirá, pero loRezcrea sobre la marcha. Al eliminar elIcon\rarchivo 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 myfilePython 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/jpggenera 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.pngobtendrá un--addIcon is no longer supportederror.También necesita herramientas de desarrollador instaladas. Esto usa el gráfico
Icon.pngy 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