ওএস এক্সের টার্মিনালের মাধ্যমে নির্দিষ্ট ফাইল টাইপের সমস্ত ফাইলের ডিফল্ট অ্যাপ্লিকেশন কীভাবে পরিবর্তন করবেন?


32

ওএস এক্স-এর টার্মিনালের মাধ্যমে নির্দিষ্ট ফাইল টাইপের সমস্ত ফাইলের ডিফল্ট অ্যাপটি কীভাবে পরিবর্তন করতে পারি?


একটি ধূপ নয়, যদিও আমি সেখানে ধরণের উত্তর দিয়েছি। এর জন্যে দুঃখিত.
ড্যানিয়েল অঙ্গুলিনির্দেশ

বিদ্যুতের ব্যবহারের জন্য, আমি একটি সাম্প্রতিক সুপার ইউজার প্রশ্নের অধীনে গ্রহণযোগ্য উত্তরটি পছন্দ করি, ওএস এক্স-এ ফাইল টাইপের সাথে যুক্ত ডিফল্ট অ্যাপ্লিকেশনগুলিকে পরিবর্তন করার কি আরও দ্রুত উপায় আছে? । সরলতার জন্য, আমি নীচে ড্যানিয়েলের উত্তর পছন্দ করি ।
গ্রাহাম পেরিন

উত্তর:


38

আমি একটি সহজ উপায় আছে। আপনার যদি ইতিমধ্যে এটি না থাকে তবে আপনি হোমব্রু চাইবেন :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

ডুটি ইনস্টল করুন:

brew install duti

এখন আপনি যে অ্যাপ্লিকেশনটি ব্যবহার করতে চান তার আইডিটি খুঁজে বের করতে হবে এবং আপনি যে এক্সটেনশানটির জন্য এটি ব্যবহার করতে চান সেটি নির্ধারণ করুন। এই উদাহরণস্বরূপ, আমি ইতিমধ্যে এর জন্য বন্ধনী ব্যবহার করেছি *.shএবং আমি এটি *.mdxcode এর পরিবর্তে ফাইলগুলির জন্যও ব্যবহার করতে চাই ।

.shফাইলগুলির জন্য ডিফল্ট অ্যাপ্লিকেশন আইডি পান :

duti -x sh

output:
  Brackets.app
  /opt/homebrew-cask/Caskroom/brackets/1.6/Brackets.app
  io.brackets.appshell

শেষ লাইনটি আইডি।

সমস্ত .mdফাইলের জন্য এই অ্যাপ্লিকেশন আইডি ব্যবহার করুন :

duti -s io.brackets.appshell .md all

3
আমি পারলে এই 50 বার upvote হবে। দুর্দান্ত তথ্য। এল ক্যাপ্টেনে আমার জন্য মোহনীয় কাজ করেছিলেন।
রায়ান ওয়ালস

1
সিয়েরায়ও কাজ করছেন। অতিরিক্ত টিপ: ইউটিআইগুলি একটি ব্যথা, তবে আপনি প্রদত্ত ফাইলের (এবং সেইজন্য এক্সটেনশান) জন্য ইউটিআই খুঁজে পেতে "এমডিএলএস-নাম কেএমডিআইটিমেট কনটেন্ট টাইপ <ফাইল>" ব্যবহার করতে পারেন।
অ্যাড্রিয়ান

2
আপনি যদি ইতিমধ্যে কোনও অ্যাপ্লিকেশনটির সাথে এইভাবে কিছু যুক্ত না করে থাকেন তবে নিজের অ্যাপটির নাম জানেন তবে আপনি osascript -e 'id of app "$appName"'আপনার সিস্টেমে যে কোনও অ্যাপ্লিকেশনটির আইডি ইনস্টল করতে পারেন
গ্রেডফক্স

1
কেবলমাত্র রেফারেন্সের জন্য: ড্রেটির সাথে @ গ্রেডফক্স থেকে টিপকে একত্রিত করে:duti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
স্ট্রাজক

18

সম্পাদনা করুন ~/Library/Preferences/com.apple.LaunchServices.plist

LSHandlersইউটিআই (কী LSHandlerContentType, উদাহরণস্বরূপ public.plain-text) এবং অ্যাপ্লিকেশন বান্ডেল শনাক্তকারী ( LSHandlerRoleAllউদাহরণস্বরূপ com.macromates.textmate) সহ একটি এন্ট্রি যুক্ত করুন ।

সম্পত্তি তালিকার সম্পাদক হিসাবে এটির মতো দেখাচ্ছে :

বিকল্প পাঠ বিকল্প পাঠ

কমান্ড লাইন থেকে এটি করতে, ব্যবহার করুন defaultsবা /usr/libexec/PlistBuddy। দু'জনেরই রয়েছে বিশাল ম্যানাপেজ।

উদাহরণস্বরূপ .plistব্যবহার করে সমস্ত ফাইল খুলুন Xcode:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = "com.apple.property-list"; LSHandlerRoleAll = "com.apple.dt.xcode"; }'

অবশ্যই, আপনাকে নিশ্চিত করতে হবে যে ইতিমধ্যে ইউটিআইয়ের জন্য অন্য একটি প্রবেশিকা com.apple.property-listইতিমধ্যে নেই।

এখানে একটি আরও সম্পূর্ণ স্ক্রিপ্ট যা ইউটিআইয়ের জন্য বিদ্যমান এন্ট্রিগুলি সরিয়ে দেবে এবং একটি নতুন যুক্ত করবে। এটি কেবলমাত্র পরিচালনা করতে পারে LSHandlerContentTypeএবং সর্বদা সেট হয়ে যাবে LSHandlerRoleAllএবং এতে পরামিতিগুলির পরিবর্তে হার্ড-কোডড বান্ডিল আইডি রয়েছে। তা ছাড়া, এটি বেশ ভালভাবে কাজ করা উচিত।

#!/usr/bin/env bash

PLIST="$HOME/Library/Preferences/com.apple.LaunchServices.plist"
BUDDY=/usr/libexec/PlistBuddy

# the key to match with the desired value
KEY=LSHandlerContentType

# the value for which we'll replace the handler
VALUE=public.plain-text

# the new handler for all roles
HANDLER=com.macromates.TextMate

$BUDDY -c 'Print "LSHandlers"' $PLIST >/dev/null 2>&1
ret=$?
if [[ $ret -ne 0 ]] ; then
        echo "There is no LSHandlers entry in $PLIST" >&2
        exit 1
fi

function create_entry {
        $BUDDY -c "Add LSHandlers:$I dict" $PLIST
        $BUDDY -c "Add LSHandlers:$I:$KEY string $VALUE" $PLIST
        $BUDDY -c "Add LSHandlers:$I:LSHandlerRoleAll string $HANDLER" $PLIST
}

declare -i I=0
while [ true ] ; do
        $BUDDY -c "Print LSHandlers:$I" $PLIST >/dev/null 2>&1
        [[ $? -eq 0 ]] || { echo "Finished, no $VALUE found, setting it to $HANDLER" ; create_entry ; exit ; }

        OUT="$( $BUDDY -c "Print 'LSHandlers:$I:$KEY'" $PLIST 2>/dev/null )"
        if [[ $? -ne 0 ]] ; then 
                I=$I+1
                continue
        fi

        CONTENT=$( echo "$OUT" )
        if [[ $CONTENT = $VALUE ]] ; then
                echo "Replacing $CONTENT handler with $HANDLER"
                $BUDDY -c "Delete 'LSHandlers:$I'" $PLIST
                create_entry
                exit
        else
                I=$I+1 
        fi
done

3
সবচেয়ে সহজ উপায় হ'ল x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $xএই এলএসহ্যান্ডলারগুলির এন্ট্রিগুলি অনুলিপি এবং অনুলিপি করা। বান্ডিল শনাক্তকারী আপনি করতে পারেন osascript -e 'bundle identifier of (info for (path to app "TextEdit"))'
ল্রি

@ ল্রি একটি উপায়ে হ্যাঁ, তবে এই প্রশ্নটি বিশেষত কমান্ড লাইন সম্পর্কে। আমি বুঝতে পেরেছি যে টেক্সটএডিট (বা সম্পত্তি তালিকার সম্পাদক / এক্সকোড) যোগ্য নয়; আমি এই অংশটি কেবল উদাহরণের উদ্দেশ্যে আমার অন্যান্য উত্তর থেকে সম্পত্তি তালিকা সম্পাদকের সাথে অনুলিপি করেছি। বান্ডেল শনাক্তকারী সম্পর্কে দরকারী মন্তব্য।
ড্যানিয়েল অঙ্গুলিনির্দেশ


সেখানে যদি না ইউটিআই জন্য বিকল্প এন্ট্রি বিদ্যমান, আপনি সম্মত হবে "একটি অ্যারে থেকে একটি একক অভিধানের কমান্ড লাইন অপসারণ অকারণে কঠিন হতে পারে" যে?
গ্রাহাম পেরিন

1
@ গ্রাহামপেরিন এটি অহেতুক কঠিন কারণ defaultsএটি করতে সক্ষম বলে মনে হচ্ছে না এবং এর জন্য কয়েকটি PlistBuddyকলের প্রয়োজন। তবে এটি পুনরায় ব্যবহারযোগ্য শেল স্ক্রিপ্টে করা সম্ভব।
ড্যানিয়েল অঙ্গুলিনির্দেশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.