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