터미널을 사용하여 파일 또는 폴더 아이콘을 변경하는 방법


53

터미널에서 파일 또는 폴더의 아이콘을 변경하거나 설정하려면 어떻게해야합니까? 스크립팅 언어를 사용해야합니까?



잘 확장되지 않습니다. 하나의 디렉토리에있는 많은 디렉토리에 아이콘을 적용하려고했습니다. Finder는 매우 느리게 작동했습니다.
kolen

답변:


31

개발자 도구가 설치되어 있어야하며 다음이 작동 할 수 있습니다. 그래픽을 가져 와서에 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.

굉장히, 내가 원하는 것입니다.
ocodo

파일 Rez -append작업시 문제 가 .avi있습니다. ### Rez - Fatal error trying to open the resource file "Video.avi" for writing.`어떤 아이디어?
ocodo

흥미롭게도 파일 가져 오기 복사 / 붙여 넣기 방법을 통해 새 아이콘을 허용하지 않습니다.
ocodo

아이콘 크기에 제한이 있습니까? 큰 jpg (1024x768)를 사용하면 실제로 작은 크기로 조정됩니다. 어떻게 든 원래 크기를 유지할 수 있습니까?
nuc

2
최근 OSX 버전에서 개발자 도구는 $PATH( /usr/bin실제 도구를 찾을 수있는 위치에있는 스텁 ) /Developer/Tools더 이상 존재 하지 않으므로 파일 이름만으로 호출해야합니다. 즉, 손에 든 경우 Rez와 같이 DeRez.
mklement0

19

몇 년간의 가늠자의 이점으로 :

user588의 대답koiyu의 대답은 잘 작동하지만, 그들은 유틸리티에 의존 ( Rez, DeRez, 및 SetFile그) :

  • 기본적으로 설치되어 있지 않습니다 (Xcode 또는 개발자 명령 줄 유틸리티와 함께 ​​제공됨)
  • 더 이상 사용되지 않습니다 ( RezDeRez, 탄소와 관련되어 있기 때문에)

osxiconutils 는 흥미롭게 보이지만 더 이상 컴파일되지 않습니다 (OSX 10.10.4 기준) .


따라서 내가 만든 CLIfileicon , 깨끗한 OSX 기계 (전제 조건)에서 작동해야을 ; 그것은 주로에 기반 배쉬 스크립트 xattr, xxd코코아,의 호의 호출하는 임베디드 파이썬 스크립트 이 도움이 대답 .

macOS 10.13 (High Sierra)의 APFS 볼륨을 포함하여 파일 또는 폴더에 대한 사용자 정의 아이콘을 설정 / 제거 / 추출 할 수 있습니다 .

다음과 같이 설치할 수 있습니다.

  • 당신은 Node.js를 설치 한 경우 고궁 박물원의 레지스트리 와 함께
    [sudo] npm install -g fileicon
  • 그렇지 않으면:
    • CLI를 다음 과 같이 다운로드 하십시오fileicon (이 링크는 최신 상태로 유지됨).
    • 로 실행 가능하게 만드십시오 chmod +x fileicon.
    • (필수 ) $PATH와 같은 폴더로 이동하거나 심볼릭 링크합니다 ./usr/local/binsudo

사용법 정보는 다음과 같습니다. 자세한 내용은 설명서를 참조하십시오 .

$ 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

@Slomojo : [삭제 된 댓글에 대한 답변으로] 모든 사람이 Node.js를 설치하거나 설치하고 싶지는 않기 때문에 직접 다운로드 링크도 있습니다 ( '답변 : 기타 :'목록 항목 참조) -자체 포함 된 Bash 스크립트입니다 (이 방법으로 설치하면 잊어 버릴 수있는 유일한 방법은 매뉴얼 페이지 설치이지만을 사용하여 수동 페이지의 일반 텍스트 렌더링을 얻을 수 있음 fileicon --man).
mklement0

@Slomojo : [삭제 된 의견에 대한 답변으로] npm을 통한 설치가 제공되는 이유 : npm 에코 시스템이 전체적으로 내가 가장 좋아하는 패키지 관리자 인 것을 발견했으며 여러 플랫폼 간 스크립트를 게시했습니다. Node.js와 관련이없는 CLI 기반 CLI. 또한 npm (n 및 Node.js를 통해)에 대한 단일 명령, 사용자 레벨 설치 프로그램을 작성하여 Node.js에 관심이없는 사람들도 npm을 쉽게 사용할 수 있습니다 curl -L http://git.io/n-install | bash.
mklement0

3
이것은 즉시 사용 가능한 솔루션입니다. +1
3439894

1
@ PatNiemeyer : 감사합니다. osxiconutils 링크를 업데이트했지만 이 답변은 utilityfileicon관한 것입니다. 유틸리티는 여전히 작동하며 실제로 osxiconutils더 이상 작동하지 않기 때문에 생성 되었습니다-더 명확하게하기 위해 답변을 업데이트했습니다 .
mklement0

1
나는이 스레드에서 다른 사람들보다 몇 년 뒤에 있다는 것을 알고 있지만 오늘 이것을 발견했으며 훌륭하다고 언급하고 싶었습니다. 그것을 만들어 주셔서 감사합니다! 👍
TJ Luoma

18

나는 거의 내가의 아이콘을 변경 관리하지 않았기 때문에, 이것에 현상금을 시작 폴더 @의 사용 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'

그리고 파일을 위해? 내 의견 re : avi files
ocodo

@slomojo 죄송 합니다만, 발생한 오류를 재현 할 수 없습니다. .avi 파일로 mankoff의 솔루션을 테스트했습니다. 입력 한 파일 권한과 명령을 다시 확인 하시겠습니까?
Jari Keinänen

다시 한 번하겠습니다. 아마도 전에 실수를 한 것 같습니다.
ocodo

필자는 USB 썸 드라이브를 위해 필사적으로 노력하고 있습니다. 모든 명령은 오류를 반환하지 않는다는 점에서 "작동"하지만 여전히 변경되지 않은 아이콘이있는 썸 드라이브가 남아 있습니다. 모든 생각과 나는 영원히 감사 할 것입니다!
singmotor

8

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가 있으므로 패키지를 설치할 필요가 없습니다.


유니 코드에 UTF-8의 디코딩을 추가했습니다. 그렇지 않으면 스크립트가 ASCII가 아닌 파일 이름으로 작동하지 않았습니다. 또한 반환 값 검사가 추가되었으며, 아이콘을 설정하지 않으면 반환 코드가 1이됩니다.
kolen

1
어쨌든 아이콘이 가로 세로 비율을 수정하지 않도록 지정할 수 있습니까? 훌륭하게 작동하지만 이미지 파일은 사각형 모양으로 바뀝니다. 감사!
구스타보 베 제라

1
정확하게 답을 찾을 수 있지만나요 손이 잘 작동하기 전에 투명 패딩 이미지를 제곱 : stackoverflow.com/questions/12179342/...
구스타보 Bezerra을

7

Damien Bobillot가 만든 유틸리티를 확인하십시오 setfileicon(소스 코드) .

바이너리를 여기에서 다운로드하십시오 : http://maxao.free.fr/telechargements/setfileicon.gz

파일의 압축을 푼 후 실행 파일로 만듭니다.

chmod +x setfileicon

그런 다음 다음과 같이 사용할 수 있습니다.

./setfileicon "my-icon.icns" "my-file-or-directory"

정말 감사합니다. BTW, 나는 소음을 줄이기 위해 GUI 방법을 편집하고 있습니다.
ocodo

불행히도 대부분의 코드는 더 이상 사용되지 않습니다.
Mugen

3

파일 경로를 인수로 사용하는 [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

3

우리가 이미 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"을 의미합니다.


# <stdin> : 1 : ### /Applications/Xcode.app/Contents/Developer/usr/bin/Rez-읽는 동안 SysError 0
퀀타

2

또 다른 옵션은 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 설치 프로그램을 다운로드 할 수 있습니다 .


1
링크와 MacRuby는 이제 죽었습니다. MacRuby는 상업적인 구독 기반 RubyMotion에 의해 성공한 것으로 보입니다 .
mklement0

2

이상하게도 가장 좋은 해결책은 Apple의 도구가 아닌 Python 코드를 사용하는 것 같습니다.

  • 출력 파일 해상도
    (1024x1024까지 작동)
  • 입력 파일 형식
    (ICNS 및 PNG로 시도)
  • 설치 권한
    (기능으로 정의)

최신 정보

이제 (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

다른 질문에 오신 것을 환영합니다! 이것은 의견으로 더 좋을 것 같습니다. 아직 필요한 사항이 없지만, 권력이있는 사람에게 조사해 보라고 요청했습니다. 또한 깔끔한 번들 로이 모든 것을 수행하는 Applescript를 작성했습니다 .이 SE에 대한 비슷한 질문에 대한 답변을
JMY1000

네, 시도했지만 할 수 없었습니다. 또한 귀하의 의견의 두 번째 부분이 첫 번째 내용과 관련이없는 답변으로 더 좋을 것이라고 생각합니다.
dardo82

2

최근 맥 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

0

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 코드에 액세스하는 것이 가능합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.