Изменить приложение по умолчанию (для расширения файла) через скрипт / командную строку?

11

Есть ли способ определить приложение по умолчанию для расширения файла с помощью сценария Apple, командной строки (как defaults write [...]).

Я знаю, что вы можете изменить его вручную через информационную панель или с помощью RCDefaultApp, но, поскольку мне нужно настроить множество компьютеров и учетных записей пользователей, я хотел бы найти способ автоматизации процесса.

oschrenk
источник

Ответы:

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.

LRI
источник
Это кажется перспективным, хотя я не могу скомпилировать его на OS X 10.7.x или 10.8.x: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Матиас Биненс
Бинарный файл в установщике pkg у меня все еще работает на 10.8.
Lri
Понимаю. Для дальнейшего использования, вот ссылка на эту загрузку: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
Матиас Биненс,
Это работает на 10,8? Я установил приложение по умолчанию для открытия .aviфайлов в Quicktime Player (используя Finder → Получить информациюОткрыть с помощью… → _Change all ), затем побежал duti -s org.videolan.vlc public.avi allиспользовать VLC вместо этого, затем перезапустил LaunchServices - но, похоже, это не дало эффекта. (См. Список системных UTI .)
Матиас Биненс,
1
Это работает для меня по крайней мере. Это не должно требовать перестройки базы данных Launch Services или перезапуска или чего-либо еще. Если вы посмотрите ~/Library/Preferences/com.apple.LaunchServices.plist, duti автоматически преобразует большинство расширений файлов в UTI, так что вы обычно можете указывать такие типы, как .aviвместо public.avi. UTI некоторых расширений файлов зависят от установленных приложений.
Lri
12

Launch Services отвечает за ассоциации файлов по умолчанию.

Допустим, я хотел изменить все текстовые файлы, чтобы открыть в Sublime Text 2.

Сначала мне нужен kMDItemCFBundleIdentifier для Sublime Text 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\"; }'

Если я хочу, чтобы изменения вступили в силу, мне нужно перезапустить Launch Services следующим образом:

/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

Ян С.
источник
0

Этот пост на SuperUser также содержит некоторую полезную информацию. Чтобы узнать больше о LaunchServices, вот ссылка на документацию Apple для разработчиков. Перейдите в раздел, озаглавленный LSSetDefaultRoleHandlerForContentType (стр. 48).

Джон Рыгельский
источник