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


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.