Змінити програму за замовчуванням (для розширення файлу) через скрипт / командний рядок?


11

Чи є спосіб визначити програму за замовчуванням для розширення файлу за допомогою сценарію Apple, командного рядка (наприклад 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 dutiабо запустивши 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.


Це здається багатообіцяючим, хоча я не можу здатись компілювати його на OS X 10.7.x або 10.8.x : checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens

Бінарний файл в інсталяторі pkg все ще працює для мене на 10.8.
Лрі

Розумію. Для подальшого ознайомлення, ось посилання на це завантаження: 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 - але, здавалося, це не має ніякого ефекту. (Див. Список оголошених системою UTI .)
Mathias Bynens

1
Це працює принаймні для мене. Він не повинен вимагати відновлення бази даних Launch Services або перезавантаження або чогось іншого. Якщо ви подивитесь ~/Library/Preferences/com.apple.LaunchServices.plist, duti перетворює більшість розширень імен файлів в UTI автоматично, тож зазвичай ви можете вказати типи, як .aviзамість public.avi. ПТІ деяких розширень імен файлів залежать від встановлених програм.
Лрі

12

Служби запуску відповідають за асоціації файлів за замовчуванням.

Скажімо, я хотів змінити всі текстові файли для відкриття в Sublime Text 2.

Спочатку мені потрібен kMDItemCFBundleIdentifier для піднесеного тексту 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\"; }'

Якщо я хочу, щоб зміни набрали чинності, мені потрібно буде перезапустити Служби запуску так:

/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 -типи-в-mac-os-x


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.