macOS Sonoma 14.3.1下如何通过Shell命令行访问和修改文件关联信息
macOS Sonoma 14.3.1下如何通过Shell命令行访问和修改文件关联信息
我最近刚好踩过Sonoma下文件关联的坑,确实之前的plist路径又有变化,而且直接改plist容易出问题(系统可能会自动覆盖,还涉及权限),给你整理几个实用的命令行方案,尤其是你要的MP4应用切换脚本:
一、先说说当前的存储位置(但不推荐直接修改)
在Sonoma 14.3.1里,文件关联的核心信息还是存在~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist,但现在系统会把部分信息同步到一个更底层的数据库里,直接编辑这个plist不仅需要解锁权限,修改后还可能被系统重置,所以更推荐用官方或第三方工具来操作。
二、可用的命令行工具
1. 官方工具:lsregister
这是Apple自带的Launch Services管理工具,路径有点长,完整路径是:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
你可以用它查看当前的关联信息,比如查询MP4对应的UTI(统一类型标识符,MP4的UTI是public.mpeg-4):
$ /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -A 15 -B 5 "public.mpeg-4"
不过lsregister的用法比较繁琐,设置关联需要写很长的参数,所以更推荐下面的第三方工具。
2. 第三方工具:duti(强烈推荐)
duti是专门用来管理macOS文件关联的轻量工具,用法简单直观,用Homebrew就能安装:
brew install duti
安装后可以快速查询、设置文件关联,完全满足你的需求。
三、实现MP4默认应用切换的zsh脚本
我给你写了一个现成的zsh脚本,亲测在Sonoma 14.3.1下可用,能实现“QuickTime和Lossless Cut互相切换”的功能:
#!/usr/bin/env zsh # 定义两个应用的Bundle ID(可以用mdls命令获取:mdls -name kMDItemCFBundleIdentifier /Applications/xxx.app) QUICKTIME_BUNDLE="com.apple.QuickTimePlayerX" LOSSLESSCUT_BUNDLE="com.mifi.losslesscut" # 获取当前MP4的默认应用Bundle ID current_bundle=$(duti -x mp4 | awk '{print $2}') # 判断并切换 if [[ "$current_bundle" == "$QUICKTIME_BUNDLE" ]]; then duti -s "$LOSSLESSCUT_BUNDLE" .mp4 all echo "✅ 已将MP4默认应用切换为Lossless Cut" killall Finder # 重启Finder让设置生效 elif [[ "$current_bundle" == "$LOSSLESSCUT_BUNDLE" ]]; then duti -s "$QUICKTIME_BUNDLE" .mp4 all echo "✅ 已将MP4默认应用切换为QuickTime Player" killall Finder else echo "⚠️ 当前MP4默认应用不是指定的两个,已自动设置为QuickTime Player" duti -s "$QUICKTIME_BUNDLE" .mp4 all killall Finder fi
脚本说明:
- 先通过
duti -x mp4获取当前MP4的默认应用信息,用awk提取Bundle ID - 对比Bundle ID来判断当前应用,然后用
duti -s <Bundle ID> .mp4 all设置关联(all表示所有MP4文件类型) - 最后重启Finder确保设置立即生效
如果不知道应用的Bundle ID,可以用这个命令获取:
mdls -name kMDItemCFBundleIdentifier /Applications/QuickTime\ Player.app
把路径换成Lossless Cut的应用路径就行。
备注:内容来源于stack exchange,提问作者DownUnder62
相关产品推荐
相关产品推荐

