เปลี่ยนแอปพลิเคชั่นเริ่มต้น (สำหรับนามสกุลไฟล์) ผ่านสคริปต์ / บรรทัดคำสั่ง?


11

มีวิธีในการกำหนดแอปพลิเคชั่นเริ่มต้นสำหรับนามสกุลไฟล์ผ่าน Apple script, command line command (like 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จากนั้นเรียก

คุณสามารถติดตั้งกับ Duti หรือโดยการทำงานbrew install dutiwget 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 หรือ checking which SDK to use... configure: error: darwin12.0.0 is not a supported system10.8.x:
งัด Bynens

ไบนารีในตัวติดตั้ง pkg ยังคงใช้ได้กับฉันในวันที่ 10.8
Lri

ฉันเห็น. สำหรับการอ้างอิงในอนาคตนี่คือลิงค์ไปยังการดาวน์โหลดนั้น: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
Mathias Bynens

ใช้งานได้กับ 10.8 หรือไม่ ฉันตั้งค่าแอปพลิเคชั่นเริ่มต้นให้เปิด.aviไฟล์เป็น Quicktime Player (โดยใช้ Finder →รับข้อมูลเปิดด้วย…→ _ เปลี่ยนทั้งหมด ) จากนั้นจึงวิ่งduti -s org.videolan.vlc public.avi allไปใช้ VLC แทนจากนั้นเริ่ม LaunchServices - แต่ดูเหมือนว่าจะไม่มีผล (ดูรายการ UTIs ที่ระบบประกาศ )
Mathias Bynens

1
มันใช้งานได้สำหรับฉันอย่างน้อย ไม่ควรกำหนดให้มีการสร้างฐานข้อมูล Launch Services หรือเริ่มใหม่หรืออะไรก็ตาม ถ้าคุณใช้เวลาดูที่~/Library/Preferences/com.apple.LaunchServices.plistแปลง Duti นามสกุลของไฟล์มากที่สุดที่จะอุทิศโดยอัตโนมัติเพื่อให้คุณจะสามารถระบุประเภทชอบแทน.avi public.aviUTIs ของนามสกุลไฟล์บางชื่อขึ้นอยู่กับแอปพลิเคชันที่ติดตั้ง
Lri

12

Launch Services รับผิดชอบการเชื่อมโยงไฟล์เริ่มต้น

สมมติว่าฉันต้องการเปลี่ยนไฟล์ข้อความทั้งหมดเพื่อเปิดใน Sublime Text 2

ก่อนอื่นฉันต้องการ kMDItemCFBundleIdentifier สำหรับ Sublime Text 2 ฉันสามารถใช้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\"; }'

หากฉันต้องการให้การเปลี่ยนแปลงมีผลฉันจะต้องเริ่มต้น Launch Services ใหม่ดังนี้:

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

และเพื่อให้เครดิตที่เครดิตครบกำหนดฉันได้เรียนรู้เกี่ยวกับวิธีการนี้จากคำถามและคำตอบ stackoverflow.com นี้: /programming/9172226/how-to-set-default-application-for-specific-file -types ในแม็-os-x


0

โพสต์บน SuperUserนี้ยังมีข้อมูลที่เป็นประโยชน์ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ LaunchServices นี่คือลิงค์ไปยังเอกสารประกอบสำหรับนักพัฒนาของ Apple ไปที่ส่วนที่ชื่อว่าLSSetDefaultRoleHandlerForContentType (หน้า 48)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.