Terminalde bir komut dosyası dili kullanmam gerekir mi, bir dosya veya klasör simgesini nasıl değiştirebilir veya ayarlayabilirim?
Terminalde bir komut dosyası dili kullanmam gerekir mi, bir dosya veya klasör simgesini nasıl değiştirebilir veya ayarlayabilirim?
Yanıtlar:
Yüklü Geliştirici Araçlarına ihtiyacınız olacak ve ardından aşağıdakiler işe yarayabilir. Bu, grafiği alır icon.png
ve uygular 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
çalışırken sorun yaşıyorum .avi
. ### Rez - Fatal error trying to open the resource file "Video.avi" for writing.
`herhangi bir fikir?
$PATH
( /usr/bin
asıl araçları nerede bulacağını bilenler) olduğunu ve /Developer/Tools
artık olmadığını unutmayın, bu yüzden onları yalnızca dosya adlarıyla çağırmalısınız; yani, eldeki durumda olduğu gibi Rez
ve DeRez
.
Birkaç yıl boyunca elde edeceğiniz fayda ile:
user588 cevabı ve koiyu cevabı iyi çalışabilir, ancak kamu hizmetleri güveniyor ( Rez
, DeRez
ve SetFile
o):
Rez
ve DeRez
, çünkü onlar Karbon ile ilgili)osxiconutils ilginç görünüyor, ancak artık derlenmiyor (OSX 10.10.4'ten itibaren) .
Bu nedenle , bozulmamış bir OSX makinesinde çalışması gereken CLI'yifileicon
oluşturdum (önkoşul yok) ; öncelikle dayalı bir Bash script xattr
, xxd
ve Kakao, nezaket çağıran gömülü Python komut bu yararlı cevap .
MacOS 10.13 (High Sierra) üzerindeki APFS birimleri de dahil olmak üzere, dosyalar veya klasörler için / dan özel simgelerin ayarlanmasına / kaldırılmasına / çıkarılmasına izin verir .
Aşağıdaki gibi yükleyebilirsiniz:
[sudo] npm install -g fileicon
fileicon
(bu bağlantı geçerli kalacaktır).chmod +x fileicon
.$PATH
gibi) içinde bir klasöre ./usr/local/bin
sudo
İşte kullanım bilgileri; tam bilgi için kılavuza bakınız :
$ 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
hala işe yarayan (ve aslında osxiconutils
artık çalışmadığı için yaratılmış olan) hizmet programı ile ilgili olduğuna dikkat edin - cevabı daha net hale getirmek için güncelledim. .
Ben neredeyse bir simgesini değiştirmek başaramadı çünkü bu bir ödül başladı klasöre @ kullanarak mankoff 'ın cevabı . Ama bir çözüm buldum.
Klasörün simgesini değiştirmek için klasöre işaret etmiyorsunuz Rez -append tmp.rsrc
, klasörün Icon\r
içinde özel bir dosya var. Daha önce klasöre özel bir simge ayarlamadıysanız, dosya büyük olasılıkla bulunmaz, ancak Rez
anında oluşturur. Icon\r
Dosyayı silmek özel simgeyi kaldırır, böylece kazaları önlemek için gizlenmesinin iyi olması gerekir.
Bunlar mankoff'un cevabındaki değişiklikler:
# 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'ye ek olarak, bir Python sürümü:
#!/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'de önceden kurulmuş olan Python'da zaten PyObjC var, bu nedenle herhangi bir paket yüklemeniz gerekmez.
Damien Bobillot tarafından oluşturulan bir yardımcı program, göz atın setfileicon
(kaynak kodu) .
İkili dosyayı buradan indirin: http://maxao.free.fr/telechargements/setfileicon.gz
Dosyayı paketinden çıkardıktan sonra, çalıştırılabilir hale getirin:
chmod +x setfileicon
Sonra aşağıdaki gibi kullanabilirsiniz:
./setfileicon "my-icon.icns" "my-file-or-directory"
Dosya yollarını argüman olarak alan [shell / bash, python, perl, ruby, vs.] betiklerinden AppleScript "damlacıkları" oluşturduğum bir github projem var . Bir klasörün simgesini değiştirmek için bu bash işlevini yazdım (çünkü AppleScript paketleri .app uzantılı klasörlerdir).
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'
}
Tanımlandıktan sonra, işlevi 2 argümanla çağırırsınız:
replace_icon /path/to/AppleScript.app /path/to/icon.png
veya
replace_icon /path/to/AppleScript.app http://i.imgur.com/LmUvWqB.png
Gördüğünüz gibi ikinci argüman sisteminizde bir resim veya bir URL olabilir.
NOT: Yaptığım o çılgın görünümlü $'/Icon\r'
şey, Icon dosyasının adı değişmez satır başı ile bitiyor \r
. Şununla kendiniz görün:
find my-applescript.app -maxdepth 1 | less -U
Zaten icns dosyamız olduğunu varsayalım. İcns dosyasına işaret eden geçici kaynak dosyası oluşturun:
$ echo "read 'icns' (-16455) \"Icon.icns\";" >> Icon.rsrc
Kaynak dosyayı "com.apple.ResourceFork" genişletilmiş özniteliğinin değeri olarak bir dosyaya ekleyin:
$ Rez -a Icon.rsrc -o FileName.ext
Dosyanın simgesini göster:
$ SetFile -a C FileName.ext
Kaynak dosyayı, "com.apple.ResourceFork" adlı genişletilmiş özniteliğin değeri olarak, geçerli klasördeki sihirli bir simge dosyasına ekleyin:
$ Rez -a Icon.rsrc -o Icon$'\r'
Geçerli klasörün simgesini göster:
$ SetFile -a C .
Sihirli klasör dosyasını geçerli klasörün içinde gizleyin (Gizli dosyaları Finder'da göstermek / gizlemek için ⇧⌘.
$ SetFile -a V Icon$'\r'
Simge verileri, "com.apple.ResourceFork" ("xattr -p com.apple.ResourceFork FileName.ext" komutunun "" komutu) özniteliğinin değeri olarak depolanır. Bir klasör için, klasörün içinde sihirli (boş ve gizli) bir dosya vardır Icon$'\r'
. "Com.apple.ResourceFork" adlı genişletilmiş öznitelikteki simge verilerini düz metin kaynak dosyasına (içinden "doğru icns tipi tanımlayıcı" -16455 "olarak bildiğimiz) çıkarmak için:
$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc
MacOS altında 10.13 Yüksek Sierra komutu $ sips -i ImageFile.icns/png/jpg
"--addIcon artık desteklenmiyor" hatasını veriyor. "-İ" anahtarı, bu görüntü dosyasının içeriğini kullanarak bu dosyanın kendisinin üzerinde "com.apple.ResourceFork" genişletilmiş özniteliği olarak "--addIcon" anlamına gelir.
MacRuby kullanmak başka bir seçenek:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
MacRuby için bir yükleyiciyi http://macruby.org adresinden indirebilirsiniz .
Garip bir şekilde, en iyi çözüm Apple'ın kendi araçlarını kullanmak değil Python kodunu kullanmak gibi görünüyor çünkü bununla sınırlı kalmaması gereken çeşitli avantajları var:
Güncelleme
Şimdi (macOS Sierra'da) @ koiyu'nun cevabı işe yarıyor gibi görünüyor, bu nedenle bu iki liner'ı bir kaynak klasörden hedef klasörünüze kopyalamak için kullanabilirsiniz:
#!/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
Son macOS sürümünde (10.14) hata sips -i icon.png
alırsınız --addIcon is no longer supported
.
Aynı zamanda yüklü Geliştirici Araçları gerekli. Bu grafiği alır Icon.png
ve uygular file.ext
gibi, user588 cevabı :
# 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 kullanan Python çözümü gibi, sadece AppleScript ile yapılabilir (Python ve diğer betik dillerinin aksine, 10.15 Catalina'da onaylanmayan).
GitHub’da bunun nasıl yapılacağına dair bir örnek buldum:
#!/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'in okunması kolay değildir, ancak görünüşe göre bunu AppKit çerçevesi üzerinden yapmak için Objective-C koduna erişmek mümkündür.