Thay đổi ứng dụng mặc định (cho phần mở rộng tập tin) thông qua tập lệnh / dòng lệnh?


11

Có cách nào để xác định ứng dụng mặc định cho phần mở rộng tệp thông qua tập lệnh Apple, lệnh dòng lệnh (như defaults write [...]).

Tôi biết rằng bạn có thể thay đổi thủ công thông qua bảng thông tin hoặc bằng cách sử dụng RCDefaultApp nhưng vì tôi phải thiết lập nhiều máy và tài khoản người dùng, tôi muốn tìm cách tự động hóa quy trình.

Câu trả lời:


6

duti là một tiện ích shell cho phép sử dụng tệp văn bản để định cấu hình các ứng dụng mặc định cho các loại tệp và lược đồ URL.

Ví dụ: lưu một tệp như thế này như ~/.duti:

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

Sau đó chạy duti ~/.duti.

Bạn có thể cài đặt duti với brew install dutihoặc bằng cách chạy 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.


Điều này có vẻ đầy hứa hẹn, mặc dù tôi dường như không thể biên dịch nó trên OS X 10.7.x hoặc 10.8.x : checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens

Nhị phân trong trình cài đặt pkg vẫn hoạt động với tôi vào ngày 10.8.
Lri

Tôi hiểu rồi. Để tham khảo trong tương lai, đây là liên kết đến bản tải xuống đó: download.sourceforge.net/project/duti/duti/duti-1.5.0/
Kẻ

Cái này có hoạt động vào ngày 10.8 không? Tôi đặt ứng dụng mặc định để mở .avitệp thành Quicktime Player (sử dụng Finder → Nhận thông tinMở bằng cách → Thay đổi tất cả ), sau đó chạy duti -s org.videolan.vlc public.avi allđể sử dụng VLC thay vào đó, sau đó khởi động lại LaunchService - nhưng dường như không có tác dụng. (Xem danh sách các
UTI được

1
Nó làm việc cho tôi ít nhất. Nó không yêu cầu xây dựng lại cơ sở dữ liệu Launch Services hoặc khởi động lại hoặc bất cứ điều gì. Nếu bạn xem ~/Library/Preferences/com.apple.LaunchServices.plist, duti tự động chuyển đổi hầu hết các phần mở rộng tên tệp thành UTI, vì vậy bạn thường có thể chỉ định các loại như .avithay vì public.avi. UTI của một số phần mở rộng tên tệp phụ thuộc vào các ứng dụng được cài đặt.
Lri

12

Launch Services chịu trách nhiệm cho các hiệp hội tập tin mặc định.

Giả sử tôi muốn thay đổi tất cả các tệp văn bản để mở trong Sublime Text 2.

Đầu tiên tôi cần kMDItemCFBundleIdentifier cho Sublime Text 2. Tôi có thể sử dụng mdls để có được thông tin này:

> 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....

Tôi có thể tìm ra giá trị loại nội dung cho các tệp văn bản bằng cách kiểm tra một trong số chúng bằng 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

Trong trường hợp này, tôi sẽ thay đổi ứng dụng mặc định cho tất cả các public.plain-textloại.

Để làm điều này tôi gõ:

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

Nếu tôi muốn các thay đổi có hiệu lực, tôi cần khởi động lại Dịch vụ khởi chạy như sau:

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

Và để cung cấp tín dụng khi tín dụng đáo hạn, tôi đã tìm hiểu về cách tiếp cận này từ câu hỏi và câu trả lời của stackoverflow.com này: /programming/9172226/how-to-set-default-application-for-specific-file -types-in-mac-os-x


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.