मैं टर्मिनल का उपयोग करके किसी फ़ाइल या फ़ोल्डर आइकन को कैसे बदल सकता हूं


53

मैं टर्मिनल में किसी फ़ाइल या फ़ोल्डर के लिए आइकन कैसे बदल या सेट कर सकता हूं, क्या मुझे स्क्रिप्टिंग भाषा का उपयोग करने की आवश्यकता है?



ध्यान दें कि यह अच्छी तरह से पैमाने पर नहीं है। एक निर्देशिका में बहुत सारी निर्देशिकाओं के लिए आइकन लागू करने की कोशिश की - खोजक ने बहुत धीमी गति से काम किया।
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.

बहुत बढ़िया, बस यही मैं चाहता था।
ओसोडो

Rez -appendजब मैं .aviफ़ाइलों के साथ काम कर रहा हूँ तो मुझे परेशानी हो रही है । ### Rez - Fatal error trying to open the resource file "Video.avi" for writing.`कोई विचार?
ओसोडो

दिलचस्प बात यह है कि इसने फाइल को गेट इन्फो कॉपी / पेस्ट विधि के माध्यम से एक नया आइकन स्वीकार करने में असमर्थ बना दिया।
ओकोडो

क्या आइकन आकार पर प्रतिबंध है? अगर मैं एक बड़े jpg (1024x768) का उपयोग करूँ तो यह वास्तव में छोटे आकार का होगा। क्या मैं किसी तरह इसके मूल आकार को बरकरार रख सकता हूँ?
nuc

2
ध्यान दें कि हाल के OSX संस्करणों में डेवलपर टूल $PATH( /usr/binउस स्टब्स में पता होता है कि वास्तविक उपकरण कहां मिलेंगे), और /Developer/Toolsअब और नहीं , इसलिए आपको उन्हें केवल उनके फ़ाइल नाम से ही इनवॉइस करना चाहिए; यानी, मामले में, जैसे ही Rezऔर DeRez
mklement0

19

कई वर्षों के लाभ के साथ:

user588 के जवाब और koiyu का जवाब अच्छी तरह से काम करते हैं, लेकिन वे उपयोगिताओं पर भरोसा करते हैं ( Rez, DeRez, और SetFile) है कि:

  • डिफ़ॉल्ट रूप से स्थापित नहीं हैं (वे Xcode या डेवलपर कमांड-लाइन उपयोगिताओं के साथ आते हैं)
  • अब वंचित हैं ( Rezऔर DeRez, क्योंकि वे कार्बन से संबंधित हैं)

osxiconutils दिलचस्प लग रही है, लेकिन अब (जैसे कि OSX 10.10.4) संकलन नहीं करेगी


इसलिए मैंने सीएलआईfileicon बनाया है , जो एक प्राचीन ओएसएक्स मशीन (कोई पूर्वापेक्षाएँ) पर काम करना चाहिए ; यह एक बैश स्क्रिप्ट है जो मुख्य रूप से आधारित है xattr, xxdऔर एक एम्बेडेड पाइथन स्क्रिप्ट है जो कोको को इस सहायक उत्तर के सौजन्य से बुलाती है ।

यह MacOS 10.13 (हाई सिएरा) पर APFS संस्करणों सहित, फ़ाइलों या फ़ोल्डरों के लिए / से कस्टम आइकॉन को सेट / रिमूव / रिमूव करने की अनुमति देता है ।

आप इसे इस प्रकार स्थापित कर सकते हैं:

  • आप Node.js स्थापित किया है, NPM रजिस्ट्री से , के साथ
    [sudo] npm install -g fileicon
  • अन्यथा:
    • CLI को fileiconइस रूप में डाउनलोड करें (यह लिंक चालू रहेगा)।
    • इसके साथ निष्पादन योग्य बनाएं chmod +x fileicon
    • इसे स्थानांतरित करें या इसे अपने फ़ोल्डर में सीलिंक करें $PATH, जैसे /usr/local/bin(आवश्यकता sudo)।

यहां उपयोग की जानकारी है; पूरी जानकारी के लिए, मैनुअल देखें :

$ 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 स्थापित करना चाहता है, यही कारण है कि प्रत्यक्ष डाउनलोड लिंक भी है (मेरे उत्तर में 'अन्यथा: `सूची आइटम देखें) - यह एक स्व-निहित बैश स्क्रिप्ट है (केवल इस तरह से स्थापित करने से आपको जो चीज मिलती है वह मैन पेज की स्थापना है, लेकिन आप मैनुअल पेज का एक सादा-पाठ प्रतिपादन प्राप्त कर सकते हैं fileicon --man)।
mklement0

@Slomojo: [एक के बाद एक टिप्पणी के जवाब में] के रूप में क्यों npm के माध्यम से स्थापित करने की पेशकश की है: मैंने पाया है कि npm पारिस्थितिकी तंत्र मेरे पसंदीदा पैकेज प्रबंधक है, और मैं पार मंच, स्क्रिप्ट के एक नंबर प्रकाशित किया है -बड़े हुए CLIs जो Node.js- संबंधित नहीं हैं। मैंने npm (n और Node.js के माध्यम से) के लिए एकल-कमांड, उपयोगकर्ता-स्तरीय इंस्टॉलर भी बनाया है, जो उन लोगों के लिए भी npm का उपयोग करना आसान बनाता है, जिन्हें अन्यथा Node.js में कोई रुचि नहीं है curl -L http://git.io/n-install | bash:।
mklement0

3
यह बॉक्स वर्किंग सॉल्यूशन से अच्छा है। +1
user3439894

1
@PatNiemeyer: धन्यवाद, मैंने osxiconutils लिंक अपडेट किया है, लेकिन ध्यान दें कि यह उत्तर उपयोगिता के बारे में हैfileicon , जो अभी भी काम करता है (और, वास्तव में, क्योंकि osxiconutilsअब काम नहीं करता है) - मैंने उस क्लीयर को बनाने के लिए उत्तर अपडेट कर दिया है ।
mklement0

1
मुझे लगता है कि मैं इस धागे पर बाकी सभी लोगों से कुछ साल पीछे हूं, लेकिन मैं यह उल्लेख करना चाहता हूं कि मैंने आज यह खोज की है और यह बहुत अच्छा है। इसे बनाने के लिए धन्यवाद! Lu
टीजे लुओमा

18

मैंने लगभग इस पर एक इनाम शुरू किया, क्योंकि मैंने @ 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'

और एक फाइल के लिए? मेरी टिप्पणी को फिर से नोट करें: एवी फाइलें
ओकोडो

@slomojo क्षमा करें, लेकिन मैं आपको प्राप्त त्रुटि को दोहरा नहीं सकता- बस aavi फ़ाइल के साथ मैनकॉफ़ के समाधान का परीक्षण किया। आपके द्वारा दर्ज की गई फ़ाइल अनुमतियों और आदेशों की पुनः जाँच करें?
जरी कीनानलेन

मैं इसे एक और जाने दूंगा, शायद मैंने पहले एक गलती की।
ओखोडो

मैं USB अंगूठे ड्राइव के लिए ऐसा करने की पूरी कोशिश कर रहा हूं। सभी कमांड "काम" करते हैं कि वे त्रुटियों को वापस नहीं करते हैं, लेकिन मैं अभी भी अपरिवर्तित आइकन के साथ एक अंगूठे ड्राइव के साथ छोड़ दिया गया हूं। किसी भी विचार और मैं सदा आभारी होंगे!
सिंग्मोटर

8

रूबी के अलावा, यहाँ एक पायथन संस्करण है:

#!/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 है ताकि आपको कोई पैकेज स्थापित न करना पड़े।


मैंने यूटीएफ -8 के डिकोडिंग को यूनिकोड में जोड़ा, अन्यथा स्क्रिप्ट ने गैर-एएससीआईआई फ़ाइल नाम के साथ काम नहीं किया। वापसी मान के अलावा जोड़ा जांच, आइकन स्थापित करने के लिए विफलता के 1. वापसी कोड में परिणाम होगा
Kolen

1
क्या वैसे भी हम उस आइकन को निर्दिष्ट कर सकते हैं जिसमें पहलू अनुपात संशोधित नहीं है? यह बहुत अच्छा काम करता है, लेकिन छवि फ़ाइलों को एक वर्ग में बदल दिया जाता है। धन्यवाद!
गुस्तावो बीज़र्रा

1
वास्तव में जवाब नहीं मिला, लेकिन हाथ से पहले पारदर्शी गद्दी के साथ छवियों को चुकता करने से पहले ठीक काम किया: stackoverflow.com/questions/12179342/…
Gustavo Bezerra

7

की जाँच करें setfileicon(स्रोत कोड) , एक उपयोगिता डेमियन बॉबिलोट द्वारा बनाई गई।

यहां बाइनरी डाउनलोड करें: http://maxao.free.fr/telechargements/setfileicon.gz

फ़ाइल को अनपैक करने के बाद, इसे निष्पादित करें:

chmod +x setfileicon

तो आप इसे निम्नानुसार उपयोग कर सकते हैं:

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

इसके लिए धन्यवाद, वास्तव में बहुत उपयोगी है। BTW, मैं शोर को कम करने के लिए GUI विधि का संपादन कर रहा हूं।
ओसोडो

दुर्भाग्य से अधिकांश कोड अब पदावनत हो गए हैं।
मुगें

3

मेरे पास एक 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

3

यह मानते हुए कि हमारे पास आइकन्स-फाइल पहले से है। अस्थायी संसाधन फ़ाइल बनाएँ जो आइकन्स-फाइल की ओर इशारा करती है:

$ 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" के रूप में।


# <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 जाहिरा तौर पर वाणिज्यिक, सदस्यता-आधारित रूबीमोशन द्वारा सफल रहा ।
21

2

अजीब रूप से पर्याप्त सबसे अच्छा समाधान यह प्रतीत होता है कि ऐप्पल के स्वयं के उपकरण का उपयोग नहीं किया जा रहा है, लेकिन पायथन कोड क्योंकि इसके विभिन्न फायदे सीमित नहीं हैं:

  • आउटपुट फ़ाइल रिज़ॉल्यूशन
    (यह 1024x1024 तक काम करता है)
  • इनपुट फ़ाइल प्रारूप
    (ICNS और PNG के साथ आज़माया गया)
  • स्थापित करने की अनुमति
    (इसे फ़ंक्शन के रूप में परिभाषित करें)

अपडेट करें

अब (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

अलग पूछने के लिए आपका स्वागत है! ऐसा लगता है कि यह टिप्पणी के रूप में बेहतर होगा। मुझे पता है कि आपके पास अभी तक आवश्यक बिंदु नहीं हैं, लेकिन मैंने किसी ऐसे व्यक्ति से पूछा है जो आने के लिए एक नज़र रखता है। इसके अलावा, मैंने एक Applescript लिखा है जो एक साफ बंडल में आपके लिए यह सब करता है, इस एसई पर एक समान प्रश्न के लिए मेरा उत्तर
JMY1000

हां, मैंने कोशिश की लेकिन ऐसा नहीं कर सका। इसके अलावा मुझे लगता है कि आपकी टिप्पणी का दूसरा भाग एक उत्तर के रूप में बेहतर होगा, 1 से संबंधित नहीं है।
dardo82

2

हाल के 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

0

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 कोड को एक्सेस करना संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.