You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:33:01