मैं टर्मिनल में किसी फ़ाइल या फ़ोल्डर के लिए आइकन कैसे बदल या सेट कर सकता हूं, क्या मुझे स्क्रिप्टिंग भाषा का उपयोग करने की आवश्यकता है?
मैं टर्मिनल में किसी फ़ाइल या फ़ोल्डर के लिए आइकन कैसे बदल या सेट कर सकता हूं, क्या मुझे स्क्रिप्टिंग भाषा का उपयोग करने की आवश्यकता है?
जवाबों:
आपको डेवलपर टूल इंस्टॉल करने की आवश्यकता होगी, और फिर निम्नलिखित काम कर सकते हैं। यह ग्राफिक को अंदर ले जाता है 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) संकलन नहीं करेगी ।
इसलिए मैंने सीएलआईfileicon
बनाया है , जो एक प्राचीन ओएसएक्स मशीन (कोई पूर्वापेक्षाएँ) पर काम करना चाहिए ; यह एक बैश स्क्रिप्ट है जो मुख्य रूप से आधारित है xattr
, xxd
और एक एम्बेडेड पाइथन स्क्रिप्ट है जो कोको को इस सहायक उत्तर के सौजन्य से बुलाती है ।
यह MacOS 10.13 (हाई सिएरा) पर 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
फ़ाइल कस्टम आइकन तो दुर्घटनाओं को रोकने के लिए यह छिपा हो के लिए अच्छा है निकाल देंगे,।
ये मैनकॉफ़ के उत्तर के संशोधन हैं:
# 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'
रूबी के अलावा, यहाँ एक पायथन संस्करण है:
#!/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
मैक ओएस में पहले से इंस्टॉल किया गया पायथन में पहले से ही PyObjC है ताकि आपको कोई पैकेज स्थापित न करना पड़े।
की जाँच करें setfileicon
(स्रोत कोड) , एक उपयोगिता डेमियन बॉबिलोट द्वारा बनाई गई।
यहां बाइनरी डाउनलोड करें: http://maxao.free.fr/telechargements/setfileicon.gz
फ़ाइल को अनपैक करने के बाद, इसे निष्पादित करें:
chmod +x setfileicon
तो आप इसे निम्नानुसार उपयोग कर सकते हैं:
./setfileicon "my-icon.icns" "my-file-or-directory"
मेरे पास एक github प्रोजेक्ट है जहाँ मैं AppleScript "बूंदों" को [शेल / बैश, पाइथन, पर्ल, रूबी, आदि] स्क्रिप्ट्स से बनाता हूँ जो फाइल पथ को तर्क के रूप में लेते हैं। मैंने फ़ोल्डर के आइकन को बदलने के लिए यह बैश फ़ंक्शन लिखा था (क्योंकि 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'
}
एक बार परिभाषित होने पर, आप फ़ंक्शन को 2 तर्कों के साथ कहते हैं:
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'
चीज जो मैं करता हूं, क्योंकि आइकन फ़ाइल का नाम शाब्दिक कैरिज रिटर्न के साथ समाप्त होता है \r
। अपने लिए देखें:
find my-applescript.app -maxdepth 1 | less -U
यह मानते हुए कि हमारे पास आइकन्स-फाइल पहले से है। अस्थायी संसाधन फ़ाइल बनाएँ जो आइकन्स-फाइल की ओर इशारा करती है:
$ 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 .
वर्तमान फ़ोल्डर के अंदर मैजिक आइकन फ़ाइल छिपाएँ (फाइंडर में छिपी फ़ाइलों को दिखाने / छिपाने के लिए files दबाएं):
$ SetFile -a V Icon$'\r'
आइकन डेटा को विस्तारित विशेषता "com.apple.ResourceFork" (टर्मिनल कमांड "xattr -p com.apple.ResourceFork FileName.ext" के मान के रूप में संग्रहीत किया जाता है)। एक फ़ोल्डर के Icon$'\r'
लिए फ़ोल्डर के अंदर जादू (जो खाली और छिपा हुआ है) फ़ाइल है। विस्तारित पाठ "com.apple.ResourceFork" से सादे पाठ संसाधन फ़ाइल में आइकन डेटा निकालने के लिए (जिससे हम सही आइकनों-प्रकार पहचानकर्ता "-16455" जानते हैं):
$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc
MacOS के तहत 10.13 हाई सिएरा कमांड $ sips -i ImageFile.icns/png/jpg
त्रुटि उत्पन्न करता है "--adIcon अब समर्थित नहीं है"। स्विच "-i" का अर्थ है - इस चित्र फ़ाइल की सामग्री का उपयोग करके इस फ़ाइल पर विस्तारित विशेषता "com.apple.ResourceFork" के रूप में।
एक अन्य विकल्प 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 के लिए एक इंस्टॉलर डाउनलोड कर सकते हैं ।
अजीब रूप से पर्याप्त सबसे अच्छा समाधान यह प्रतीत होता है कि ऐप्पल के स्वयं के उपकरण का उपयोग नहीं किया जा रहा है, लेकिन पायथन कोड क्योंकि इसके विभिन्न फायदे सीमित नहीं हैं:
अपडेट करें
अब (macOS Sierra पर) @ koiyu का उत्तर काम करने लगता है, इसलिए आप इस दो-लाइनर का उपयोग किसी स्रोत फ़ोल्डर से आइकन को अपने गंतव्य फ़ोल्डर में कॉपी करने के लिए कर सकते हैं:
#!/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
हाल के macOS संस्करण (10.14) में, sips -i icon.png
एक --addIcon is no longer supported
त्रुटि मिलेगी ।
इसे भी डेवलपर टूल इंस्टॉल करने की आवश्यकता है। यह ग्राफ़िक को उपयोगकर्ता के 588 के उत्तर की तरह ही लेता है 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 का उपयोग करते हुए पायथन समाधान की तरह, यह पता चलता है कि यह सिर्फ AppleScript (जो 10.15 कैटालिना में चित्रित नहीं किया गया है, पायथन और अन्य स्क्रिप्टिंग भाषाओं के विपरीत) के साथ किया जा सकता है।
मुझे 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 कोड को एक्सेस करना संभव है।