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

Macos 如何在OS X上使用CLI在文件或目录上设置图标?,macos,icons,command-line-interface,Macos,Icons,Command Line Interface,使用Finder中的“获取信息”对话框可以直接在文件或目录上设置图标 复制图像,例如预览 打开获取文件或目录的信息 按TAB键选择图标 粘贴Cmd-V 但是如何使用命令行执行此操作?这里有一个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 ic

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

复制图像,例如预览 打开获取文件或目录的信息 按TAB键选择图标 粘贴Cmd-V
但是如何使用命令行执行此操作?

这里有一个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

假设我们已经有了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 .
显示当前文件夹的图标:

$ 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的值。对于文件夹,有一个魔法,它是空的,隐藏在文件夹内的文件图标$'\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表示-addIcon作为扩展属性com.apple.ResourceFork切换到此文件本身。

如果要回答自己的问题,应将答案部分移动到答案部分,并将其标记为已接受。否则,人们会尝试为您回答。在MLion上尝试此操作后,在创建../https-::www.pivotaltracker.com:dashboard.webloc时得到了Rez-SysError-37。Rez-尝试打开资源文件时出现致命错误../https-::www.pivotaltracker.com:dashboard.webloc以进行写入。谢谢。当我的iconSource也是一个.icns文件时,您的脚本对我起了作用。Rez和SetFile在其手册页中被标记为已弃用。有没有一种不受欢迎的方法可以做到这一点?太棒了,非常感谢!