回答:
開発者ツールをインストールする必要があります。その後、次のように機能します。これはグラフィックを取り込み、に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.
Rez -append
を.avi
操作するときに問題が発生します。### Rez - Fatal error trying to open the resource file "Video.avi" for writing.
`アイデアはありますか?
$PATH
(/usr/bin
実際のツールを見つける場所を知っているスタブ)にあり、/Developer/Tools
もう存在しないことに注意してください。すなわち、当面のケースでは、Rez
とのようにDeRez
。
数年後知恵の恩恵を受けて:
user588の答えとkoiyuの答えの仕事だけでなく、彼らは(ユーティリティに依存しているRez
、DeRez
とSetFile
)その:
Rez
およびDeRez
、Carbonに関連しているため)osxiconutilsはおもしろそうに見えますが、もうコンパイルされません(OSX 10.10.4時点)。
したがって、私はCLIfileicon
を作成しました。これは、初期のOSXマシンで動作するはずです(前提条件はありません)。それは主に基づいて、bashスクリプトでxattr
、xxd
そしてココアの礼儀呼び出し、埋め込まれたPythonスクリプトこの便利な答えを。
macOS 10.13(High Sierra)上のAPFSボリュームを含む、ファイルまたはフォルダーのカスタムアイコンの設定/削除/抽出が可能です。
次のようにインストールできます。
[sudo] npm install -g fileicon
使用情報は次のとおりです。詳細については、マニュアルを参照してください。
$ 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
fileicon --man
)。
curl -L http://git.io/n-install | bash
。
fileicon
まだ機能しているユーティリティに関するものであることに注意してください(実際にはosxiconutils
機能しなくなったので作成されました)-私はそれを明確にするために答えを更新しました。
私はほとんど私がのアイコンに変更するために管理していなかったので、この上の恩恵を開始したフォルダ使用を@ mankoffの答えを。しかし、私は解決策を見つけました。
フォルダーのアイコンを変更Rez -append tmp.rsrc
するには、フォルダーではなくIcon\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'
Rubyに加えて、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
Mac OSにプリインストールされているPythonにはすでにPyObjCが含まれているため、パッケージをインストールする必要はありません。
Damien Bobillotによって作成されたユーティリティsetfileicon
(ソースコード)をチェックアウトします。
ここからバイナリをダウンロードします:http : //maxao.free.fr/telechargements/setfileicon.gz
ファイルを解凍したら、実行可能にします。
chmod +x setfileicon
その後、次のように使用できます。
./setfileicon "my-icon.icns" "my-file-or-directory"
引数としてファイルパスを取る[shell / bash、python、perl、rubyなど]スクリプトからAppleScriptの「ドロップレット」を作成するgithubプロジェクトがあります。フォルダのアイコンを変更するためにこの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
ご覧のとおり、2番目の引数はシステム上の画像、またはURLです。
注:その狂気探して$'/Icon\r'
、私がやる事はあるので、とアイコンファイルの端の名前リテラルキャリッジリターン\r
。で自分の目で確かめてください:
find my-applescript.app -maxdepth 1 | less -U
icns-fileがすでにあると仮定します。icns-fileを指す一時リソースファイルを作成します。
$ 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 .
現在のフォルダー内の魔法のアイコンファイルを非表示にします(Finderで非表示のファイルを表示/非表示するには、⇧⌘を押します)。
$ SetFile -a V Icon$'\r'
アイコンデータは、拡張属性「com.apple.ResourceFork」の値として保存されます(ターミナルコマンド「xattr -p com.apple.ResourceFork FileName.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コマンドで$ sips -i ImageFile.icns/png/jpg
は、エラー「--addIconはサポートされなくなりました」が生成されます。スイッチ "-i"は、このイメージファイルのコンテンツを使用してこのファイル自体に拡張属性 "com.apple.ResourceFork"としての "--addIcon"を意味します。
別のオプションは、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コードを使用することです。
更新
これで(macOS Sierraで)@koiyuの答えは機能しているように見えるので、この2ライナーを使用して、ソースフォルダーから目的のフォルダーにアイコンをコピーできます。
#!/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
エラーが発生します。
また、開発者ツールをインストールする必要がありました。これはグラフィックを取り込み、user588の答えのようにIcon.png
それを適用します:file.ext
# 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
PyObjCを使用したPythonソリューションと同様に、AppleScriptのみで実行できることがわかりました(Pythonや他のスクリプト言語とは異なり、10.15 Catalinaでは非推奨ではありません)。
GitHubでこれを行う方法の例をここに見つけました:
#!/usr/bin/env osascript use framework "AppKit" -------------------------------------------------------------------------------- # PROPERTY DECLARATIONS: property this : a reference to current application property NSWorkspace : a reference to NSWorkspace of this property NSImage : a reference to NSImage of this -------------------------------------------------------------------------------- # IMPLEMENTATION: on run argv set icon to item 1 of argv set target to item 2 of argv setIcon to icon for target end run -------------------------------------------------------------------------------- # HANDLERS: to setIcon to iconPath for filePath set sharedWorkspace to NSWorkspace's sharedWorkspace() set newImage to NSImage's alloc() set icon to newImage's initWithContentsOfFile:iconPath set success to sharedWorkspace's setIcon:icon forFile:filePath options:0 end setIcon
AppleScriptは読みやすいものではありませんが、明らかにAppKitフレームワークを介してObjective-Cコードにアクセスしてこれを行うことが可能です。