Как я могу изменить значок файла или папки с помощью терминала

apple.stackexchange https://apple.stackexchange.com/questions/6901

  •  16-10-2019
  •  | 
  •  

Вопрос

Как я могу изменить или установить значок для файла или папки, в терминале мне нужно использовать язык сценариев?

Это было полезно?

Решение

Вам понадобятся установленные инструменты разработчика, и тогда следующие могут работать. Это берет графику в icon.png и применяет это к 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.

Другие советы

Благодаря нескольким годам задним числом:

Ответ пользователя588 а также Ответ Койю работать хорошо, но они полагаются на коммунальные услуги (Rez, DeRez, а также SetFile) что:

  • не установлены по умолчанию (они поставляются с XCODE или командными утилитами разработчика)
  • теперь устарели (Rez а также DeRez, потому что они относятся к углероду)

OsxicInutils выглядеть интересно, но больше не компилируется (с OSX 10.10.4).


Поэтому я создал Кли fileicon, который должен работать на нетронутой машине OSX (без предварительных условий); это сценарий, основанный в первую очередь на xattr, xxd и встроенный сценарий Python, который называет какао, любезно предоставлена этот полезный ответ.

Это позволяет Настройка/удаление/извлечение пользовательских значков для/из файлов или папок, в том числе на объемах APFS на MacOS 10.13 (высокая сьерра).

Вы можете установить его следующим образом:

  • Если у вас установлен node.js, из реестра NPM, с
    [sudo] npm install -g fileicon
  • В противном случае:
    • Скачать CLI в качестве fileicon (Эта ссылка будет оставаться актуальной).
    • Сделать это исполняемым chmod +x fileicon.
    • Переместите его или символизируйте папку в своей $PATH, такие как /usr/local/bin (требует sudo).

Вот информация об использовании; Для получения полной информации обратитесь к руководство:

$ 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

я почти начал награду по этому поводу, потому что мне не удалось изменить значок папка с использованием @МанкоффS. отвечать. Анкет Но я нашел решение.


Чтобы изменить значок папки, вы не указываете Rez -append tmp.rsrc к папке, но особенной Значок r Файл внутри папки. Если вы не установили пользовательский значок в папку раньше, файл, вероятно, не будет, но Rez Создает это на - фляжка. Удаление Icon\r Файл удалит пользовательский значок, поэтому для предотвращения несчастных случаев хорошо быть скрытым.

Это модификации ответа Манкоффа:

# 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'

В дополнение к Руби, вот версия 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, который предварительно установил в Mac OS, уже имеет PyoBJC, поэтому вам не нужно устанавливать какие-либо пакеты.

Проверить setfileicon (исходный код), утилита, созданная Дэмиеном Бобайлотом.

Скачать двоичный здесь: http://maxao.free.fr/telechargements/setfileicon.gz

После распаковки файла, сделайте его исполняемым:

chmod +x setfileicon

Тогда вы можете использовать его следующим образом:

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

у меня есть GitHub Project где я создаю AppleScript «капельки» из сценариев [Shell/Bash, Python, Perl, Ruby и т. Д.], Которые принимают пути файла в качестве аргументов. Я написал эту функцию Bash для изменения значка папки (потому что пакеты AppleScript - это папки с расширением .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'
}

После определения вы называете функцию с 2 аргументами:

replace_icon /path/to/AppleScript.app /path/to/icon.png

или же

replace_icon /path/to/AppleScript.app http://i.imgur.com/LmUvWqB.png

Как видите, второй аргумент может быть изображением в вашей системе или URL.

ПРИМЕЧАНИЕ: Это безумно выглядит $'/Icon\r' то, что я делаю, потому что имя файла значка заканчивается буквальный возврат каретки \r. Анкет Смотрите сами с:

find my-applescript.app -maxdepth 1 | less -U

Предполагая, что у нас уже есть ICNS-файл. Создайте файл Temp Resource, который указывает на ICNS-файл:

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

Добавьте файл ресурса как значение расширенного атрибута «com.apple.resourcefork» в файл:

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

Покажите значок файла:

$ SetFile -a C FileName.ext

Приложение файла ресурса в качестве значения расширенного атрибута «com.apple.resourcefork» к файлу магического значка в текущей папке:

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

Показать значок текущей папки:

$ SetFile -a C .

Скрыть файл значка Magic в текущей папке (нажмите ⇧⌘. Чтобы показать/скрыть скрытые файлы в Finder):

$ SetFile -a V Icon$'\r'

Дополнительные детали

Данные значков сохраняются как значение расширенного атрибута «com.apple.resourcefork» (команда терминала «xattr -p com.apple.resourcefork fileename.ext» печатает значение). Для папки есть волшебный (который пуст и скрыт) файл Icon$'\r' Внутри папки. Чтобы извлечь данные значка из расширенного атрибута "com.apple.resourcefork" в файл простого текстового ресурса (из которого мы знаем правильный идентификатор типа ICNS "-16455"):

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

Под MacOS 10.13 High Sierra Command $ sips -i ImageFile.icns/png/jpg генерирует ошибку "-Аддикон больше не поддерживается". Switch "-i" означает "-addicon" в качестве расширенного атрибута "com.apple.resourcefork" на этот файл, используя содержимое этого файла изображения.

Другой вариант - использовать Macruby:

/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'

Вы можете скачать установщик для Macruby от http://macruby.org.

Как ни странно, лучшим решением является не использование собственных инструментов Apple, а код Python, потому что оно имеет различные преимущества, которые не ограничены:

  • Выходное разрешение файла
    (Он работает до 1024x1024)
  • формат ввода файла
    (Пробовал с ICNS и PNG)
  • Разрешения на установку
    (Определите это как функцию)

Обновлять

Теперь (на Macos Sierra) @Koiyu, кажется, работает, так что вы можете использовать этот двухстроитель для копирования значка из папки исходной папки в папку назначения:

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

В недавней версии MacOS (10.14), sips -i icon.png получит --addIcon is no longer supported ошибка.

Он также нуждался в инструментах разработчика. Это берет графику в Icon.png и применяет это к file.ext, как Ответ пользователя588:

# 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с apple.stackexchange
scroll top