macOS 过去使用 plist 来~/Library/Preferences/com.apple.LaunchServices.plist
存储文件关联信息。最近该文件已移动,现在称为~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
。
然而在 macOS Sonoma (14.3.1) 下,似乎甚至这一点也已被取代。
因此,虽然我可以通过常规的 Finder 路径更改文件关联,但如何从命令行访问/更新文件关联信息?
具体来说,我想编写一个 zsh 实用程序,用于在 Quicktime Player 和 Lossless Cut 之间切换用于 MP4 文件的默认应用程序。类似这样的:
If default Application for mp4 is Quicktime Player set to Lossless Cut and vice versa.
但我找不到任何可以让我做到这一点的命令。
所以我需要知道文件关联信息现在存储在哪里以及哪些命令允许您操作该信息。
如果您想知道我为什么要这样做,我经常(一天几次)在 Quicktime Player 和 Lossless Cut 中打开 mp4。通常它们是不同的文件,因此更改给定文件的文件关联的解决方案不会那么有用(尽管其他人可能会发现这个答案很有帮助)。
答案1
我不知道如何更改文件扩展名的默认程序,但我可以分享我的经验,如何使用 APFS 文件系统的扩展属性删除指定文件的默认程序。当所有 *.mp4 类型的文件都与 VLC 播放器关联时,我遇到了一个问题,但一些罕见的文件是用 QuickTimePlayer 打开的,我不知道为什么。macos APFS 文件系统上的文件和文件夹有扩展文件属性。您可以使用以下方式查看它们:
ls -l@ filename
你可以用以下方法改变它们属性程序。检查人xattr.还有com.apple.LaunchServices.OpenWith属性允许将定义的文件与应用程序关联。例如:在我的系统中,mp4 文件的默认应用程序是 VLC。我有一个文件 live.mp4,它总是用 QuickTimePlayer 打开
ls -l@ live.mp4
com.apple.LaunchServices.OpenWith 161
com.apple.lastuseddate#PS 16
com.apple.quarantine 31
双击即可使用 QuickTimePlayer 打开。
我可以跑
xattr -d com.apple.LaunchServices.OpenWith live.mp4
双击后,它将使用 VLC 打开。现在此文件具有默认行为。
您可以通过编程设置com.apple.LaunchServices.OpenWith指定文件的属性属性-w 检查一下:https://eclecticlight.co/2017/12/20/xattr-com-apple-launchservices-openwith-sets-a-custom-app-to-open-a-file/