Ubah aplikasi default (untuk ekstensi file) melalui script / command line?

11

Apakah ada cara untuk menentukan aplikasi default untuk ekstensi file melalui skrip Apple, perintah baris perintah (seperti defaults write [...]).

Saya tahu bahwa Anda dapat mengubahnya secara manual melalui panel informasi atau dengan menggunakan RCDefaultApp tetapi karena saya harus mengatur banyak mesin dan akun pengguna, saya ingin mencari cara untuk mengotomatiskan proses.

oschrenk
sumber

Jawaban:

6

duti adalah utilitas shell yang memungkinkan menggunakan file teks untuk mengonfigurasi aplikasi default untuk jenis file dan skema URL.

Misalnya menyimpan file seperti ini sebagai ~/.duti:

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

Kemudian jalankan duti ~/.duti.

Anda dapat menginstal duti dengan brew install dutiatau dengan menjalankan 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.

Lri
sumber
Hal ini tampaknya menjanjikan, meskipun saya tidak bisa kompilasi pada OS X 10.7.x atau 10.8.x: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens
Biner di penginstal pkg masih berfungsi untuk saya di 10.8.
Lri
Saya melihat. Untuk referensi di masa mendatang, inilah tautan ke unduhan itu: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
Mathias Bynens
Apakah ini berhasil pada 10.8? Saya mengatur aplikasi default untuk membuka .avifile ke Quicktime Player (menggunakan Finder → Dapatkan InfoBuka dengan ... → _Ubah semua ), kemudian jalankan duti -s org.videolan.vlc public.avi alluntuk menggunakan VLC, kemudian restart LaunchServices - tetapi tampaknya tidak berpengaruh. (Lihat daftar ISK yang dinyatakan sistem .)
Mathias Bynens
1
Setidaknya itu bekerja untuk saya. Seharusnya tidak perlu membangun kembali database Layanan Peluncuran atau memulai kembali atau apa pun. Jika Anda melihat ~/Library/Preferences/com.apple.LaunchServices.plist, duti mengkonversi sebagian besar ekstensi nama file ke ISK secara otomatis, jadi Anda biasanya dapat menentukan jenis seperti .avibukan public.avi. ISK dari beberapa ekstensi nama file tergantung pada aplikasi yang diinstal.
Lri
12

Layanan Peluncuran bertanggung jawab atas asosiasi file default.

Katakanlah saya ingin mengubah semua file teks untuk dibuka di Sublime Text 2.

Pertama saya membutuhkan kMDItemCFBundleIdentifier untuk Sublime Text 2. Saya dapat menggunakan mdls untuk mendapatkan informasi ini:

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

Saya bisa mengetahui nilai tipe konten untuk file teks dengan memeriksa salah satunya dengan 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

Dalam hal ini saya akan mengubah aplikasi default untuk semua public.plain-textjenis.

Untuk melakukan ini saya ketik:

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

Jika saya ingin perubahan diterapkan, saya harus memulai kembali Layanan Peluncuran seperti:

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

Dan untuk memberikan kredit di mana kredit jatuh tempo, saya belajar tentang pendekatan ini dari pertanyaan dan jawaban stackoverflow.com ini: /programming/9172226/how-to-set-default-application-for-specific-file -types-in-mac-os-x

Ian C.
sumber
0

Posting di SuperUser ini juga mengandung beberapa informasi bermanfaat. Untuk mempelajari lebih lanjut tentang LaunchServices, berikut ini tautan ke dokumentasi pengembang Apple. Buka bagian berjudul LSSetDefaultRoleHandlerForContentType (halaman 48).

John Rygielski
sumber