Изменить файловую ассоциацию в терминале?

18

Есть ли способ для связи типов файлов с приложениями через терминал? Я подумал, что ~ / Library / Preferences / com.apple.launchservices.plist может это сделать, и я также видел: почему изменение командной строки на ~ / Library / Preferences / com.apple.LaunchServices.plist не вступает в силу немедленно? но я не могу заставить его работать.

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

knishka
источник

Ответы:

8

Вы можете редактировать ~/Library/Preferences/com.apple.LaunchServices.plistв текстовом редакторе после преобразования его в XML:

plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist

Затем добавьте такие записи в LSHandlersмассив:

<dict>
  <key>LSHandlerContentType</key>
  <string>com.adobe.pdf</string>
  <key>LSHandlerRoleAll</key>
  <string>net.sourceforge.skim-app.skim</string>
</dict>
<dict>
  <key>LSHandlerContentTag</key>
  <string>mkv</string>
  <key>LSHandlerContentTagClass</key>
  <string>public.filename-extension</string>
  <key>LSHandlerRoleAll</key>
  <string>org.videolan.vlc</string>
</dict>

Вы можете использовать mdlsдля просмотра UTI типов файлов и что-то вроде osascript -e 'id of app "AppName"'просмотра идентификаторов пакетов приложений.

Вы можете применить изменения com.apple.LaunchServices.plist, перезапустив. Выйти и вернуться недостаточно.


ПРИМЕЧАНИЕ : dutiбольше не находится в активной разработке и был помечен сопровождающими как «неподдерживаемый». С 2012 года в проекте не наблюдалось значительного прогресса, кроме обновлений конфигурации. Он переместился из Sourceforge в Github. Этот ответ был обновлен и теперь содержит новые ссылки.

Я также использую Duti, хотя. Я сохранил такой файл (около 100 строк) как ~/.duti:

org.gnu.Emacs public.plain-text all # .txt, .text, plain text files without an extension
org.gnu.Emacs public.unix-executable all # executable scripts
com.SequentialX.Sequential .jpg all
org.videolan.vlc .mkv all

У меня есть агент запуска, который запускается duti ~/.dutiавтоматически при ~/.dutiизменении.

Вы можете обычно использовать расширения имени файла (как .jpg) вместо UTI (как public.jpg), чтобы указать типы файлов. dutiпреобразует расширения в UTI, которые также применяются к другим расширениям (например .jpeg). Для некоторых расширений, таких как .mkvи .tex, UTI зависит от того, какое приложение зарегистрировало расширение первым.

Последняя версия из dutiтолько включает в себя исходный код, но 1.5.0 также включает в себя установку.

LRI
источник
5

Проверьте дути :

duti - это инструмент командной строки, написанный Эндрю Мортенсеном, разработанный для установки приложений по умолчанию для типов документов и схем URL в Mac OS X.

Типы документов в Mac OS X определяются тем, что Apple называет унифицированными идентификаторами типов, или UTI. Например, HTML-файлы имеют UTI public.html. Документы Microsoft Word описаны в UTI com.microsoft.word.doc. Apple предоставляет множество UTI с Mac OS X, но разработчики могут сами определять свои собственные, если UTI уникален для этого типа документа.

Имя дути означает «по умолчанию для UTI».

DA4
источник
2
Обязательное предложение: использовать brew install dutiдля установкиduti
Pier Paolo Ramon
1

Вот агент запуска для duti, который сделает свое дело:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.duti.watcher</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/duti</string>
      <string>/Users/joshgummersall/.duti</string>
    </array>
    <key>UserName</key>
    <string>joshgummersall</string>
    <key>KeepAlive</key>
    <false/>
    <key>WatchPaths</key>
    <array>
      <string>/Users/joshgummersall/.duti</string>
    </array>
  </dict>
</plist>

Очевидно, заменить joshgummersallна свое имя пользователя. Я поместил этот файл в ~/Library/LaunchAgents/duti.plist, chmmodd до 644 и запустил:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
Джош Гаммерсолл
источник
0

Краткий ответ: ассоциация приложения файла хранится в ветке ресурсов файла , и Apple предоставляет две утилиты ( Rez ветке и DeRez ), которые позволяют манипулировать ветвями ресурсов, но это не для слабонервных.

Для более подробной информации, этот вопрос очень тщательно ответил на Super User:

Nate
источник