Как я могу изменить приложение по умолчанию для всех файлов определенного типа файлов через Терминал в OS X?
macos
file-association
yashodhan
источник
источник
Ответы:
У меня есть более простой способ. Вы будете хотеть Homebrew, если у вас его еще нет:
Установить дути:
Теперь вам нужно найти идентификатор приложения, которое вы хотите использовать, и назначить его расширению, для которого вы хотите его использовать. В этом примере я уже использую скобки для
*.sh
и хочу также использовать его для*.md
файлов вместо xcode.Получить идентификатор приложения по умолчанию для
.sh
файлов:Последняя строка - это идентификатор.
Используйте этот идентификатор приложения для всех
.md
файлов:источник
osascript -e 'id of app "$appName"'
получить идентификатор любого приложения, установленного в вашей системеduti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
Редактировать
~/Library/Preferences/com.apple.LaunchServices.plist
.Добавьте запись
LSHandlers
, содержащую UTI (ключLSHandlerContentType
, напримерpublic.plain-text
) и идентификатор пакета приложения (LSHandlerRoleAll
например,com.macromates.textmate
).В редакторе списка свойств это выглядит так :
Для этого из командной строки используйте
defaults
или/usr/libexec/PlistBuddy
. Оба имеют обширные страницы управления.Например, чтобы открыть все
.plist
файлы, используяXcode
:Конечно, вам нужно убедиться, что там уже нет другой записи для UTI
com.apple.property-list
.Вот более полный скрипт, который удалит существующие записи для UTI и добавит новую. Он может обрабатывать только
LSHandlerContentType
и всегда будет устанавливатьLSHandlerRoleAll
, а вместо параметров имеет жестко закодированные идентификаторы пакета. Помимо этого, он должен работать довольно хорошо.источник
x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $x
скопировать и вставить эти записи LSHandlers. Чтобы получить идентификатор пакета, вы можете сделатьosascript -e 'bundle identifier of (info for (path to app "TextEdit"))'
.defaults
что, кажется, не в состоянии сделать это, и это требует несколькихPlistBuddy
звонков. Но это можно сделать в многократно используемом скрипте оболочки.