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

如何在OSX中利用mdls配合rsync排除指定标签文件进行备份?

用rsync结合mdls/mdfind排除OSX红/橙标签的文件/文件夹

核心思路

OSX的标签元数据可通过mdls或mdfind工具读取,先搜索出所有带目标标签的文件/文件夹路径,再将这些路径传给rsync的--exclude-from参数实现排除。

步骤1:确认标签的准确名称

OSX默认标签名称为英文(如"Red"、"Orange"),若自定义过标签名,先通过mdls查看目标文件的标签值:

mdls -name kMDItemUserTags /path/to/your/tagged-file

输出示例:kMDItemUserTags = ( "Red" ),其中的"Red"就是搜索时需用的字符串。

步骤2:生成排除列表并执行rsync

方法1:生成临时排除文件(适合需复用排除列表的场景)

# 定义源目录和备份目录
SOURCE="$HOME/Documents"
DEST="/Volumes/Backup/Documents"

# 搜索源目录内带红/橙标签的文件/文件夹,生成相对路径的排除列表
mdfind -onlyin "$SOURCE" 'kMDItemUserTags == "Red" || kMDItemUserTags == "Orange"' | sed "s|^$SOURCE/||" > exclude-list.txt

# 执行rsync备份,排除列表内的路径
rsync -av --exclude-from='exclude-list.txt' "$SOURCE/" "$DEST/"

# 可选:删除临时排除文件
rm exclude-list.txt

方法2:进程替换(无需临时文件,更简洁)

SOURCE="$HOME/Documents"
DEST="/Volumes/Backup/Documents"

rsync -av --exclude-from=<(
  mdfind -onlyin "$SOURCE" 'kMDItemUserTags == "Red" || kMDItemUserTags == "Orange"' | sed "s|^$SOURCE/||"
) "$SOURCE/" "$DEST/"

关键说明

  • -onlyin "$SOURCE":限制搜索范围仅在源目录内,避免误排除其他位置的带标签文件。
  • sed "s|^$SOURCE/||":将绝对路径转换为相对于源目录的路径,确保rsync能正确匹配排除项。
  • 若需排除带标签文件夹下的所有内容,只需将文件夹路径加入排除列表,rsync会自动处理其下所有子项。

内容的提问来源于stack exchange,提问作者Dirk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:52:19