Varsayılan uygulama (dosya uzantısı için) komut dosyası / komut satırı üzerinden değiştirilsin mi?


12

Bir Apple betiği, komut satırı komutu (gibi defaults write [...]) aracılığıyla bir dosya uzantısı için varsayılan uygulamayı tanımlamanın bir yolu var mı ?

Bilgi panelinden veya RCDefaultApp kullanarak manuel olarak değiştirebileceğinizi biliyorum, ancak birçok makine ve kullanıcı hesabı kurmam gerektiğinden süreci otomatikleştirmenin bir yolunu bulmak istiyorum.

Yanıtlar:


6

duti , dosya türleri ve URL şemaları için varsayılan uygulamaları yapılandırmak üzere bir metin dosyası kullanılmasını sağlayan bir kabuk yardımcı programıdır.

Örneğin şöyle bir dosyayı kaydedin ~/.duti:

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

Sonra koş duti ~/.duti.

Duti'yi brew install dutiçalıştırarak veya çalıştırarak kurabilirsiniz 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.


Ben OS X 10.7.x veya 10.8.x üzerine derlemek için görünmüyor olabilir ancak bu, umut verici görünüyor: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
— Mathias Bynens

Pkg yükleyicisindeki ikili dosya benim için hala 10.8'de çalışıyor.
— Lri

Anlıyorum. İleride başvurmak için, şu indirme bağlantısının bağlantısı: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
— Mathias Bynens

Bu 10.8 üzerinde çalışıyor mu? Açık varsayılan uygulamayı set .avi(→ Finder kullanarak Quicktime Player dosyaları Bilgi Alın → ile ... tüm → _Change Aç o zaman,) ran duti -s org.videolan.vlc public.avi allVLC yerine, daha sonra kullanmak üzere yeniden LaunchServices - ama hiçbir etkisi var gibiydi. ( Sistem tarafından bildirilen
— İYE'lerin

1
En azından benim için çalışıyor. Başlatma Hizmetleri veritabanını yeniden oluşturmayı veya yeniden başlatmayı veya herhangi bir şeyi gerektirmemelidir. Eğer bakarsanız ~/Library/Preferences/com.apple.LaunchServices.plist, duti çoğu dosya adı uzantısını otomatik olarak UTI'lara dönüştürür, böylece genellikle .avibunun yerine türleri belirtebilirsiniz public.avi. Bazı dosya adı uzantılarının UTI'leri yüklü olan uygulamalara bağlıdır.
— Lri

13

Başlatma Hizmetleri varsayılan dosya ilişkilendirmelerinden sorumludur.

Sublime Text 2'de açılacak tüm metin dosyalarını değiştirmek istediğimi varsayalım.

Önce Yüce Metin 2 için kMDItemCFBundleIdentifier gerekir. Bu bilgileri almak için mdls kullanabilirsiniz :

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

Ben mdls ile bunlardan birini inceleyerek metin dosyaları için içerik türü değerini bulabilirsiniz :

> 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

Bu durumda tüm public.plain-texttürler için varsayılan uygulamayı değiştireceğim .

Bunu yapmak için şunu yazıyorum:

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

Değişikliklerin yürürlüğe girmesini istiyorsanız Başlatma Hizmetlerini şu şekilde yeniden başlatmam gerekir:

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

Kredinin ödenmesi gereken yere kredi vermek için, bu yaklaşımı şu stackoverflow.com sorusundan ve yanıtından öğrendim: /programming/9172226/how-to-set-default-application-for-specific-file -types-in-mac-os-x


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.