Mac OSX कमांड लाइन पर फाइल के अनुसार फाइल एसोसिएशन को बदलते हैं


10

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

अभी, मैं उन सभी फ़ाइलों का चयन कर रहा हूं जिन्हें मैं खोजक में बदलना चाहता हूं, कई फ़ाइलों के लिए जानकारी प्राप्त करने के लिए विकल्प + कमांड + i, और उन फ़ाइलों के लिए एप्लिकेशन को बदलते हुए खोलने के लिए। यह कष्टप्रद है।

जवाबों:


6

यह जानकारी फ़ाइल के संसाधन कांटे ( विकिपीडिया ) में संग्रहीत है । ये संसाधन कांटे विस्तारित विशेषताओं ( विकिपीडिया ) के रूप में सामने आए हैं :

$ ls -l@ somefile.txt 
-rw-r--r--  1 danielbeck  staff  0 18 Mär 19:00 somefile.txt

# setting non-default application using Finder

$ ls -l@ somefile.txt 
-rw-r--r--@ 1 danielbeck  staff  0 18 Mär 19:01 somefile.txt
        com.apple.ResourceFork  1338 

खरोंच से संपादन संभवतः काफी दर्दनाक है - बहुत सारे बाइनरी डेटा:

$ xattr -p com.apple.ResourceFork somefile.txt 
00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 04 04 00 00 00 32 2F 55 73 65 72 73 2F 64
61 6E 69 65 6C 62 65 63 6B 2F 41 70 70 6C 69 63
61 74 69 6F 6E 73 2F 53 75 62 6C 69 6D 65 20 54
65 78 74 20 32 2E 61 70 70 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 08
00 00 04 08 00 00 00 32 0C 00 00 00 C0 05 00 00
00 1C 00 32 00 00 75 73 72 6F 00 00 00 0A 00 00
FF FF 00 00 00 00 19 00 00 00

लेकिन आप इन रिसोर्स फोर्क्स को फाइल्स की तरह ट्रीट कर सकते हैं। उदाहरण के लिए:

$ open somefile.txt # opens in Sublime 2
$ cp somefile.txt/..namedfork/rsrc openInSublime2rsrc
$ open otherfile.txt # opens in TextEdit
$ cp openInSublime2rsrc otherfile.txt/..namedfork/rsrc
$ open otherfile.txt # opens in Sublime 2

/..namedfork/rsrc कैसे संसाधन कांटा POSIX अनुप्रयोगों (यानी शायद आप टर्मिनल में सब कुछ करते हैं) के संपर्क में है।

तो आपको बस एक मौजूदा संसाधन फोर्क (इस उदाहरण में openInSublime2rsrc) से एक "टेम्पलेट" फ़ाइल बनाने की आवश्यकता है , और आप इसे बाद में अपनी अन्य फ़ाइलों में कॉपी कर सकते हैं।


1
इस उपाय ने सिंह तक काम किया। फ़ाइल / rsrc पर प्रतिलिपि बनाना मुझे "": निर्देशिका नहीं "त्रुटि देता है। एक वर्ग में वापस :(
रोब

1
somefile.txt/..namedfork/rsrcइसके बजाय @ रब का उपयोग करने का प्रयास करें । somefile.txt/rsrcकुछ समय पहले हटा दिया गया है।
डैनियल बेक

डैनियल बेक-आप एक लाइफसेवर हैं, बहुत बहुत धन्यवाद।
रोब

आपको संसाधन कांटे को सीधे संपादित करने की आवश्यकता नहीं है, नीचे दिए गए मेरे उत्तर को देखें, लेकिन सारांश यह है कि आप संसाधन कांटे को संपादित करने के लिए रेज और डेरिज नामक उपयोगिताओं का उपयोग कर सकते हैं। चूंकि ये समर्थित टूल हैं, इसलिए आपको समस्या होने की संभावना कम है।
mauvedeity

5

ऊपर डैनियल बेक के जवाब से उठाते हुए, यह जानकारी वास्तव में फ़ाइल के संसाधन कांटे में संग्रहीत है। डेवलपर टूल के साथ Apple दो उपयोगिताओं को प्रदान करता है, जिन्हें "रेज" और "डीरेज़" कहा जाता है, जो आपको संसाधन कांटे में हेरफेर करने की अनुमति देते हैं। विशेष रूप से, आप रेज के साथ एक फ़ाइल में एक संसाधन कांटा धक्का दे सकते हैं।

कमांड लाइन से एकल फ़ाइल के संघ को बदलने के लिए, पहले सही प्रकार की एक फ़ाइल बनाएं, और मैन्युअल रूप से उसके संघ को उस एप्लिकेशन में बदलें जिसे आप इसे खोलना चाहते हैं। यह फ़ाइल में संसाधन कांटा बनाता है - यदि आप डॉन नहीं करते हैं। यह मत करो, बाहर कॉपी करने के लिए कोई जानकारी नहीं होगी। फिर, DeRez के साथ संसाधन कांटा को इस तरह खींचें (एक फ़ाइल foo.txt मानकर, और जिस एप्लिकेशन का आप उपयोग करना चाहते हैं वह Firefox.app है)।

DeRez foo.txt > foo.r

यह foo.r नामक एक फाइल बनाएगा, जो कि टेक्स्ट फाइल के रूप में विघटित संसाधन कांटा है। यह कुछ इस तरह दिखेगा:

data 'usro' (0) {
    $"0000 001A 2F41 7070 6C69 6361 7469 6F6E"            /* ..../Application */
    $"732F 4669 7265 666F 782E 6170 7000 0000"            /* s/Firefox.app... */
    $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */

आप इसे संपादित कर सकते हैं यदि आप स्क्रैच से एक बनाना चाहते हैं, लेकिन आपको प्रारूप बिल्कुल सही प्राप्त करना होगा या यह काम नहीं करेगा। यह केवल हेक्स-एन्कोडेड वर्ण हैं जो आपको इच्छित ऐप बंडल के पथ का वर्णन करते हैं, जिसे एक शून्य के साथ समाप्त किया गया है।

आपको एक संदेश दिखाई दे रहा है जिसमें कहा जा सकता है कि संसाधन कांटा खाली है और असंवैधानिक है। यदि ऐसा है, तो आपने स्रोत फ़ाइल पर प्रति-फ़ाइल संघ को नहीं बदला है, इसलिए आपको ऐसा करने की आवश्यकता है, फिर Dezez कमांड को फिर से चलाएँ।

एक बार जब आप यह कर लेते हैं, तो आप इसे इस प्रकार एक अन्य फ़ाइल में धकेल सकते हैं (मान लें कि bar.txt मौजूद है):

Rez foo.r -a -o bar.txt

यह f.t.r से संसाधन कांटे के साथ bar.txt को अपडेट करता है।

यह जाँचने के लिए ठीक काम किया, क्योंकि न तो रेज और न ही DeRez प्रिंट त्रुटि संदेश, बस यह करें:

DeRez bar.txt

आपको पहले जैसी जानकारी देखनी चाहिए। उस सब के बाद, बस फ़ाइल को बार-बार खोलें। जैसा कि आप सामान्य रूप से करेंगे, और इसे सही एप्लिकेशन में खोलना चाहिए, डिफ़ॉल्ट नहीं।

बैच परिवर्तन करने के लिए, एक बार जब आपके पास .r फ़ाइल हो, तो आप इस तरह एक मानक वाइल्डकार्ड विस्तार का उपयोग कर सकते हैं:

Rez foo.r -a -o *.txt

यह वाइल्डकार्ड से मेल खाने वाली सभी फाइलों को करेगा।

मैंने इसे 10.7 पर किया है, लेकिन यह मेरी समझ है कि यह पहले की मशीनों पर भी काम करता है।


इन उपकरणों पर दिलचस्प जानकारी। फिर भी, ऐसा लगता है कि ये उपकरण कुछ भी नहीं करते हैं जो एक्सेस ..namedfork/rsrcकरना भी सही नहीं है? आप विशिष्ट उपकरणों के बारे में ज्ञान के लिए (अर्ध) इंटर्नल के बारे में ज्ञान की आवश्यकता का व्यापार करते हैं - मुझे यकीन नहीं है कि यह बेहतर है।
डैनियल बेक

@DanielBeck आप सही हैं, जहाँ तक मुझे पता है। हालांकि, जैसा कि ऊपर कहा गया था, आंतरिक जानकारी लायन के साथ बदल गई, जबकि ये स्थिर देव उपकरण हैं जो संस्करण-स्वतंत्र होने चाहिए। व्यक्तिगत रूप से, मुझे लगता है कि आंतरिक सामान दिलचस्प है, लेकिन उपकरण क्रॉस-प्लेटफॉर्म पर काम करने की अधिक संभावना है, और मैं समर्थित टूल का उपयोग करूंगा।
mauvedeity


1

आप कहते हैं कि आप किसी दिए गए प्रकार के, फ़ाइलों के दिए (उप) सेट से जुड़े एप्लिकेशन को "बैच परिवर्तन" करना चाहते हैं। उप-सेट क्योंकि आप उस फ़ाइल प्रकार के सभी उदाहरणों को उस नए एप्लिकेशन में बदलना नहीं चाहते हैं।

हालांकि, ऐसा करने का कोई आसान तरीका नहीं है। जिस तरह से लॉन्चसर्विस का पता चलता है कि किसी फ़ाइल को खोलने के लिए किस एप्लिकेशन को बताया जाना चाहिए, एक मल्टीस्टेज प्रक्रिया है, और विभिन्न स्कोप (उपयोगकर्ता, सिस्टम और इसी तरह) के साथ सेटिंग्स पर निर्भर करता है।

लेकिन - आप openकमांडलाइन पर उपयोग कर सकते हैं और बता सकते हैं कि इस बार एक विशिष्ट ऐप का उपयोग करना है। यह किसी भी एसोसिएशन को नहीं बदलेगा, लेकिन यह वह हासिल करेगा जो आप कहते हैं कि आप चाहते हैं, अर्थात् एक विशिष्ट एप्लिकेशन में फ़ाइलों का एक सेट खोलें:

open -a <appbundle> <somefile> <anotherfile>

पसंद

shiny:t fl$ ls -l
total 1848
-rwxr-xr-x  1 fl  staff    1795 Mar 18 20:03 distribution.pl
-rw-r--r--  1 fl  staff  939264 Mar 18 20:03 objectreport.txt
shiny:t fl$ open -a TextWrangler distribution.pl objectreport.txt

और, कमांड लाइन से पूरी तरह से दूर जाना: इस उपयोगिता पर एक नज़र डालें: http://michelf.com/software/magic-launch/


अपने विशिष्ट उदाहरण में, और open -a TextWrangler *भी तेज होगा।
डैनियल बेक

हाँ, लेकिन यह विवरण के लिए शेल वाइल्डकार्ड के विस्तार की परत को जोड़ देगा, जो उदाहरण को कम समझने योग्य बना देगा :-) खुले के लिए इतना बुरा नहीं है, लेकिन ऐसे अन्य उपकरण हैं जो वाइल्डकार्ड समस्याओं को आमंत्रित करते हैं ...
फ्लोरेंज केली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.