ওএস এক্স-এর টার্মিনালের মাধ্যমে নির্দিষ্ট ফাইল টাইপের সমস্ত ফাইলের ডিফল্ট অ্যাপটি কীভাবে পরিবর্তন করতে পারি?
ওএস এক্স-এর টার্মিনালের মাধ্যমে নির্দিষ্ট ফাইল টাইপের সমস্ত ফাইলের ডিফল্ট অ্যাপটি কীভাবে পরিবর্তন করতে পারি?
উত্তর:
আমি একটি সহজ উপায় আছে। আপনার যদি ইতিমধ্যে এটি না থাকে তবে আপনি হোমব্রু চাইবেন :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install duti
এখন আপনি যে অ্যাপ্লিকেশনটি ব্যবহার করতে চান তার আইডিটি খুঁজে বের করতে হবে এবং আপনি যে এক্সটেনশানটির জন্য এটি ব্যবহার করতে চান সেটি নির্ধারণ করুন। এই উদাহরণস্বরূপ, আমি ইতিমধ্যে এর জন্য বন্ধনী ব্যবহার করেছি *.sh
এবং আমি এটি *.md
xcode এর পরিবর্তে ফাইলগুলির জন্যও ব্যবহার করতে চাই ।
.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
osascript -e 'id of app "$appName"'
আপনার সিস্টেমে যে কোনও অ্যাপ্লিকেশনটির আইডি ইনস্টল করতে পারেন
duti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
সম্পাদনা করুন ~/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
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"))'
।
defaults
এটি করতে সক্ষম বলে মনে হচ্ছে না এবং এর জন্য কয়েকটি PlistBuddy
কলের প্রয়োজন। তবে এটি পুনরায় ব্যবহারযোগ্য শেল স্ক্রিপ্টে করা সম্ভব।