답변:
개발자 도구가 설치되어 있어야하며 다음이 작동 할 수 있습니다. 그래픽을 가져 와서에 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
, 탄소와 관련되어 있기 때문에)osxiconutils 는 흥미롭게 보이지만 더 이상 컴파일되지 않습니다 (OSX 10.10.4 기준) .
따라서 내가 만든 CLIfileicon
, 깨끗한 OSX 기계 (전제 조건)에서 작동해야을 ; 그것은 주로에 기반 배쉬 스크립트 xattr
, xxd
코코아,의 호의 호출하는 임베디드 파이썬 스크립트 이 도움이 대답 .
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
파일 것은 그래서 숨길 수하는 것이 좋다 사고를 방지하기 위해, 사용자 정의 아이콘을 제거합니다.
다음은 mankoff의 답변에 대한 수정 사항입니다.
# 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 "droplets"를 생성 하는 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'
}
일단 정의되면 두 개의 인수로 함수를 호출합니다.
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'
내가하는 미친 짓은 Icon 파일의 이름이 리터럴 캐리지 리턴으로 끝나기 때문 \r
입니다. 다음을 참조하십시오 :
find my-applescript.app -maxdepth 1 | less -U
우리가 이미 icns 파일을 가지고 있다고 가정합니다. 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)'
http://macruby.org 에서 MacRuby 설치 프로그램을 다운로드 할 수 있습니다 .
이상하게도 가장 좋은 해결책은 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
최근 맥 OS 버전 (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 코드에 액세스하는 것이 가능합니다.