Как я могу изменить или установить значок для файла или папки в терминале, мне нужно использовать язык сценариев?
script
icon
command-line
ocodo
источник
источник
Ответы:
Вам понадобятся инструменты разработчика, и тогда может сработать следующее. Это берет изображение
icon.png
и применяет его кfile.ext
.источник
Rez -append
работой с.avi
файлами.### Rez - Fatal error trying to open the resource file "Video.avi" for writing.
какие-нибудь идеи?$PATH
(заглушки,/usr/bin
которые знают, где найти реальные инструменты), а не в/Developer/Tools
, так что вы должны вызывать их только по именам файлов; т. е. в данном случае, как разRez
иDeRez
.С пользой нескольких лет задним числом:
Ответ user588 в и ответ коию в них работают хорошо, но они полагаются на коммунальные услуги (
Rez
,DeRez
иSetFile
) , что:Rez
иDeRez
, потому что они относятся к углероду)osxiconutils выглядит интересно, но больше не будет компилироваться (начиная с OSX 10.10.4) .
Поэтому я создал CLI
fileicon
, который должен работать на чистой машине OSX (без предварительных условий) ; это скрипт Bash основывается главным образом наxattr
,xxd
и встроенный Python скрипт , который вызывает какао, любезно этот полезный ответ .Это позволяет устанавливать / удалять / извлекать пользовательские значки для / из файлов или папок , в том числе на томах APFS в macOS 10.13 (High Sierra).
Вы можете установить его следующим образом:
[sudo] npm install -g fileicon
fileicon
(эта ссылка останется актуальной).chmod +x fileicon
.$PATH
, например/usr/local/bin
(требуетсяsudo
).Вот информация об использовании; для полной информации обратитесь к руководству :
источник
fileicon --man
).curl -L http://git.io/n-install | bash
.fileicon
, которая все еще работает (и фактически была создана, потому чтоosxiconutils
больше не работает) - я обновил ответ, чтобы сделать это более понятным ,Я почти начал баунти на это, потому что мне не удалось изменить иконку в папку с помощью @ Манкоф «s ответ . Но я нашел решение.
Чтобы изменить значок папки, вы указываете не
Rez -append tmp.rsrc
папку, а специальныйIcon\r
файл внутри папки. Если вы ранее не устанавливали пользовательский значок для папки, файл, вероятно, не будет существовать, ноRez
создает его «на лету». УдалениеIcon\r
файла приведет к удалению пользовательского значка, поэтому для предотвращения несчастных случаев его хорошо скрывать.Вот модификации ответа mankoff:
источник
В дополнение к Ruby, вот версия Python:
./set-image.py image.png myfile
Python, предустановленный в Mac OS, уже имеет PyObjC, поэтому вам не нужно устанавливать какие-либо пакеты.
источник
Check
setfileicon
(исходный код) , утилита, созданная Damien Bobillot.Загрузите двоичный файл здесь: http://maxao.free.fr/telechargements/setfileicon.gz
После распаковки файла сделайте его исполняемым:
Тогда вы можете использовать его следующим образом:
источник
У меня есть проект github, в котором я создаю «капли» AppleScript из сценариев [shell / bash, python, perl, ruby и т. Д.], Которые принимают пути к файлам в качестве аргументов. Я написал эту функцию bash для изменения значка папки (потому что пакеты AppleScript - это папки с расширением .app).
После определения вы вызываете функцию с 2 аргументами:
или же
Как видите, вторым аргументом может быть изображение в вашей системе или URL.
ПРИМЕЧАНИЕ. Эта сумасшедшая
$'/Icon\r'
вещь, которую я делаю, заключается в том, что имя файла Icon заканчивается буквальным возвратом каретки\r
. Убедитесь сами с:источник
Предполагая, что у нас уже есть icns-файл. Создайте временный файл ресурсов, который указывает на icns-файл:
Добавьте файл ресурса в качестве значения расширенного атрибута «com.apple.ResourceFork» в файл:
Показать значок файла:
Добавьте файл ресурсов в качестве значения расширенного атрибута «com.apple.ResourceFork» к файлу магических значков в текущей папке:
Показать значок текущей папки:
Скрыть файл магических значков внутри текущей папки (нажмите ⇧⌘., Чтобы показать / скрыть скрытые файлы в Finder):
Дополнительные детали
Данные значка хранятся в виде значения расширенного атрибута «com.apple.ResourceFork» (команда терминала «xattr -p com.apple.ResourceFork FileName.ext» печатает значение). Для папки есть волшебный (пустой и скрытый) файл
Icon$'\r'
внутри папки. Чтобы извлечь данные значка из расширенного атрибута «com.apple.ResourceFork» в файл текстового ресурса (из которого мы знаем правильный идентификатор типа icns «-16455»):В macOS 10.13 High Sierra команда
$ sips -i ImageFile.icns/png/jpg
выдает ошибку «--addIcon больше не поддерживается». Переключатель «-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, кажется, работает, поэтому вы можете использовать этот двухслойный файл, чтобы скопировать значок из исходной папки в папку назначения:
источник
В последней версии macOS (10.14)
sips -i icon.png
появится сообщение--addIcon is no longer supported
об ошибке.Это также нуждается в Установленных Инструментах разработчика. Это использует изображение
Icon.png
и применяет егоfile.ext
, как и ответ пользователя user588 :источник
Как и решение Python, использующее PyObjC, оказывается, что это можно сделать только с помощью AppleScript (что не рекомендуется в 10.15 Catalina, в отличие от Python и других языков сценариев).
Я нашел пример того, как сделать это на GitHub здесь:
AppleScript нелегко читать, но, очевидно, можно получить доступ к коду Objective-C, чтобы сделать это через платформу AppKit.
источник