स्क्रिप्ट / कमांड लाइन के माध्यम से डिफ़ॉल्ट एप्लिकेशन (फ़ाइल एक्सटेंशन के लिए) को बदलें?


12

क्या Apple स्क्रिप्ट, कमांड लाइन कमांड (जैसे defaults write [...]) के माध्यम से फ़ाइल एक्सटेंशन के लिए डिफ़ॉल्ट एप्लिकेशन को परिभाषित करने का एक तरीका है ।

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

जवाबों:


6

duti एक शेल उपयोगिता है जो फ़ाइल प्रकारों और URL योजनाओं के लिए डिफ़ॉल्ट अनुप्रयोगों को कॉन्फ़िगर करने के लिए एक पाठ फ़ाइल का उपयोग करने में सक्षम बनाता है।

उदाहरण के लिए एक फाइल को इस तरह से सेव करें ~/.duti:

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

फिर चला duti ~/.duti

आप के साथ brew install dutiया चलाने के द्वारा duti स्थापित कर सकते हैं wget https://github.com/fitterhappier/duti/archive/duti-1.5.2.tar.gz;tar -xf duti-1.5.2.tar.gz;cd duti-duti-1.5.2;./configure;make;sudo make install


यह आशाजनक लगता है, हालाँकि मैं इसे OS X 10.7.x या 10.8.x पर संकलित नहीं कर सकता checking which SDK to use... configure: error: darwin12.0.0 is not a supported system
मैथियास ब्यनेंस

Pkg इंस्टॉलर में बाइनरी मेरे लिए अभी भी 10.8 पर काम करती है।
Lri

समझा। भविष्य के संदर्भ के लिए, उस डाउनलोड का लिंक यहाँ है: downloads.sourceforge.net/project/duti/duti/duti-1.5.0//-
Mathias Bynens

क्या यह 10.8 पर काम करता है? मैं खोलने के लिए डिफ़ॉल्ट आवेदन सेट .aviक्विकटाइम प्लेयर के लिए फ़ाइलें (खोजकर्ता का उपयोग करके → जानकारी प्राप्त करेंसाथ ... सब → _Change ओपन ,) तो भाग गया duti -s org.videolan.vlc public.avi allवीएलसी बजाय, तो उपयोग करने के लिए पुन: प्रारंभ LaunchServices - लेकिन यह कोई प्रभाव नहीं लग रहा था। ( सिस्टम-घोषित यूटीआई की सूची देखें ।)
मैथियस ब्यानेन्स

1
यह मेरे लिए कम से कम काम करता है। इसे लॉन्च सेवा डेटाबेस के पुनर्निर्माण या पुनः आरंभ करने या कुछ भी करने की आवश्यकता नहीं होनी चाहिए। यदि आप एक नज़र डालते हैं ~/Library/Preferences/com.apple.LaunchServices.plist, तो डटी अधिकांश फ़ाइल नाम एक्सटेंशनों को स्वचालित रूप से यूटीआई में परिवर्तित करता है, इसलिए आप आमतौर पर .aviइसके बजाय प्रकार निर्दिष्ट कर सकते हैं public.avi। कुछ फ़ाइल एक्सटेंशन के UTIs स्थापित किए गए अनुप्रयोगों पर निर्भर करते हैं।
१०:३२ बजे ला्री अगस्ट

12

लॉन्च सेवा डिफ़ॉल्ट फ़ाइल संघों के लिए जिम्मेदार है।

मान लीजिए कि मैं सब टेक्स्ट टेक्स्ट 2 में खोलने के लिए सभी टेक्स्ट फ़ाइलों को बदलना चाहता था।

सबसे पहले मुझे Sublime Text 2 के लिए kMDItemCFBundleIdentifier की आवश्यकता है। मैं इस जानकारी को प्राप्त करने के लिए mdls का उपयोग कर सकता हूं :

> mdls /Applications/Sublime\ Text\ 2.app 
_kTimeMachineIsCreationMarker  = 1
_kTimeMachineNewestSnapshot    = 4001-01-01 00:00:00 +0000
_kTimeMachineOldestSnapshot    = 2012-02-22 03:49:19 +0000
kMDItemCFBundleIdentifier      = "com.sublimetext.2"
....snip....

मैं mdls के साथ उनमें से एक का निरीक्षण करके पाठ फ़ाइलों के लिए सामग्री प्रकार मान का पता लगा सकता हूं :

> mdls test.txt 
kMDItemContentCreationDate     = 2012-03-25 04:18:50 +0000
kMDItemContentModificationDate = 2012-03-25 04:18:50 +0000
kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-03-25 04:18:50 +0000
kMDItemDisplayName             = "test.txt"
kMDItemFSContentChangeDate     = 2012-03-25 04:18:50 +0000
kMDItemFSCreationDate          = 2012-03-25 04:18:50 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "test.txt"
kMDItemFSNodeCount             = 975
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 975
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Plain Text"
kMDItemLogicalSize             = 975
kMDItemPhysicalSize            = 4096

इस मामले में मैं सभी public.plain-textप्रकार के लिए डिफ़ॉल्ट एप्लिकेशन बदल दूंगा ।

ऐसा करने के लिए मैं टाइप करता हूं:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

अगर मैं बदलावों को प्रभावी बनाना चाहता हूं तो मुझे लॉन्च सेवाओं को फिर से शुरू करना होगा:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

और क्रेडिट देने के लिए जहां क्रेडिट बकाया है, मैंने इस स्टैकओवरफ्लो.कॉम से इस दृष्टिकोण के बारे में सीखा। प्रश्न और उत्तर: /programming/9172226/how-to-set-default-application-for-spotific-file -types में मैक-os-x


0

SuperUser की इस पोस्ट में कुछ उपयोगी जानकारी भी है। लॉन्चसर्विस के बारे में अधिक जानने के लिए, यहां पर Apple के डेवलपर डॉक्यूमेंटेशन का लिंक दिया गया है। LSSetDefaultRoleHandlerForContentType (पृष्ठ 48) शीर्षक वाले अनुभाग पर जाएँ ।

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