如何在OS X上使用CLI在文件或目录上设置图标?

时间:2011-12-03 23:09:18

标签: macos icons command-line-interface

使用"获取信息"直接在文件或目录上设置图标。 Finder中的对话框。

  1. 从中复制图像预览
  2. 打开"获取信息"在文件或目录
  3. 按TAB选择图标
  4. 粘贴Cmd-V
  5. 但是如何使用命令行执行此操作?

2 个答案:

答案 0 :(得分:7)

这是一个bash脚本“setIcon.sh”

#!/bin/sh
# Sets an icon on file or directory
# Usage setIcon.sh iconimage.jpg /path/to/[file|folder]
iconSource=$1
iconDestination=$2
icon=/tmp/`basename $iconSource`
rsrc=/tmp/icon.rsrc

# Create icon from the iconSource
cp $iconSource $icon

# Add icon to image file, meaning use itself as the icon
sips -i $icon

# Take that icon and put it into a rsrc file
DeRez -only icns $icon > $rsrc

# Apply the rsrc file to
SetFile -a C $iconDestination

if [ -f $iconDestination ]; then
    # Destination is a file
    Rez -append $rsrc -o $iconDestination
elif [ -d $iconDestination ]; then
    # Destination is a directory
    # Create the magical Icon\r file
    touch $iconDestination/$'Icon\r'
    Rez -append $rsrc -o $iconDestination/Icon?
    SetFile -a V $iconDestination/Icon?
fi

# Sometimes Finder needs to be reactivated
#osascript -e 'tell application "Finder" to quit'
#osascript -e 'delay 2'
#osascript -e 'tell application "Finder" to activate'

rm $rsrc $icon

答案 1 :(得分:0)

假设我们已经有icns文件。创建指向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 .

将魔术图标文件隐藏在当前文件夹中(按⇧⌘。以显示/隐藏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 is no longer supported。切换-i意味着使用该图像文件的内容将“ --addIcon”作为扩展属性“ com.apple.ResourceFork”扩展到该文件本身。