是否有通过终端将文件类型与应用程序关联的方法?我以为〜/ Library / Preferences / com.apple.launchservices.plist可以做到,而且我还看到:为什么将命令行更改为〜/ Library / Preferences / com.apple.LaunchServices.plist不能立即生效?但我似乎无法正常工作。
我想我正在寻找一种模仿GUI的方法,当有人使用它来更改关联类型时,它似乎在那儿立即起作用...
是否有通过终端将文件类型与应用程序关联的方法?我以为〜/ Library / Preferences / com.apple.launchservices.plist可以做到,而且我还看到:为什么将命令行更改为〜/ Library / Preferences / com.apple.LaunchServices.plist不能立即生效?但我似乎无法正常工作。
我想我正在寻找一种模仿GUI的方法,当有人使用它来更改关联类型时,它似乎在那儿立即起作用...
Answers:
~/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的启动代理,可以完成此操作:
<?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
,chmmod
d为644和RAN:
$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
简短的答案:文件的应用程序关联存储在文件的资源派生中,Apple提供了两个实用程序(Rez和DeRez)来允许对资源派生进行操作。但这并不是出于胆小。
有关更多详细信息,超级用户可以非常彻底地回答此问题:
brew install duti
安装duti