mac通过xattr修改com.apple.metadata:_kmditemusertags扩展属性为文件添加标签,需用plutil生成utf-8编码的二进制plist格式数据,支持中文、多标签及空格,直接写文本会失效。
mac 通过终端给文件添加标签,本质是修改文件的 com.apple.metadata:_kmditemusertags 扩展属性(xattr),这是 macos finder 标签功能的底层机制。系统原生不提供 tag add 这类命令,但可用 xattr 配合 mdls 和 plutil 完成——操作需注意格式规范,否则标签无法在访达中正常显示。
✅ 正确添加标签的步骤(支持中文、多标签、空格)
假设你想给桌面的一个文件 报告.pdf 添加两个标签:重要 和 2026。
1. 准备标签数据(必须为 plist 格式)
macOS 要求标签以 UTF-8 编码的二进制 plist 存储,内容是字符串数组。不能直接写文本,需用 plutil 生成:
printf '(\n "重要",\n "2026"\n)' | plutil -convert binary1 -o - --stdin | xattr -wx com.apple.metadata:_kMDItemUserTags -
但更稳妥的做法是分步生成临时 plist 再写入:
# 创建临时标签数组 plist(纯文本格式) cat > /tmp/tags.plist <plist version="1.0"><array><string>重要</string><string>2026</string></array></plist> EOF # 转为二进制 plist 并写入文件属性 plutil -convert binary1 /tmp/tags.plist xattr -wx com.apple.metadata:_kMDItemUserTags "$(cat /tmp/tags.plist)" ~/Desktop/报告.pdf # 清理临时文件 rm /tmp/tags.plist
⚠️ 注意:
- 标签名不能含斜杠
/、冒号:、控制字符;- 中文完全支持,但需确保终端编码为 UTF-8(默认即满足);
- 文件路径中若有空格或中文,务必用引号包裹,如
"~/Desktop/我的 文件.pdf"。
2. 验证是否成功
mdls -name kMDItemUserTags ~/Desktop/报告.pdf
输出类似:
kMDItemUserTags = ("重要", "2026")
此时打开访达,该文件右上角会出现对应颜色标签。
? 常见错误与避坑
直接用
xattr -w写纯文本会失败
❌ 错误示例:xattr -w com.apple.metadata:_kMDItemUserTags "重要" file.pdf
→ Finder 不识别,mdls查不到,标签不显示。标签名重复不会报错,但 Finder 只显示一个
系统自动去重,无需手动判断。对目录同样有效
标签会显示在文件夹图标角落,且子文件不会继承该标签(与 Finder 手动打标行为一致)。
? 快速复用:封装为一行函数(推荐加入 .zshrc)
tag() {
local file="$1"
shift
local tags=("$@")
if [ $# -eq 0 ] || [ ! -e "$file" ]; then
echo "用法: tag [标签2] [...]"
return 1
fi
printf '%s\n' "${tags[@]}" | plutil -convert binary1 -o - --stdin | xattr -wx com.apple.metadata:_kMDItemUserTags - "$file"
}
启用后,终端中可直接运行:
tag ~/Desktop/合同.docx 已审阅 法务
标签立即生效,访达刷新即可看到。
不复杂但容易忽略格式要求。










