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 << 'EOF'
<?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">
<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 <文件路径> <标签1> [标签2] [...]"
return 1
fi
printf '%s\n' "${tags[@]}" | plutil -convert binary1 -o - --stdin | xattr -wx com.apple.metadata:_kMDItemUserTags - "$file"
}启用后,终端中可直接运行:
tag ~/Desktop/合同.docx 已审阅 法务
标签立即生效,访达刷新即可看到。
不复杂但容易忽略格式要求。

















