更改终端中的文件关联?


18

是否有通过终端将文件类型与应用程序关联的方法?我以为〜/ Library / Preferences / com.apple.launchservices.plist可以做到,而且我还看到:为什么将命令行更改为〜/ Library / Preferences / com.apple.LaunchServices.plist不能立即生效?但我似乎无法正常工作。

我想我正在寻找一种模仿GUI的方法,当有人使用它来更改关联类型时,它似乎在那儿立即起作用...

Answers:


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,这些UTI也适用于其他扩展名(如.jpeg)。对于某些扩展名,例如.mkv.tex,UTI取决于哪个应用程序首先注册了扩展名。

最新的版本duti只包含源代码,但是1.5.0还包括一个安装程序。


5

退房duti

duti是由Andrew Mortensen编写的命令行工具,旨在为Mac OS X上的文档类型和URL方案设置默认应用程序。

Mac OS X上的文档类型由Apple所谓的统一类型标识符或UTI定义。例如,HTML文件的UTI为public.html。Microsoft Word文档由UTI com.microsoft.word.doc描述。Apple为Mac OS X提供了许多UTI,但是只要UTI对于该文档类型是唯一的,开发人员就可以自由定义它们。

duti的名称表示“ UTI的默认值”。


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.plistchmmodd为644和RAN:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.