mac用户rsync同步需显式排除系统缓存与隐藏垃圾文件(如.ds_store、.fseventsd、library/caches等),否则导致目标端堆积无用文件、浪费空间并干扰增量比对;应使用--exclude或--exclude-from配合**递归匹配,再通过--dry-run与--itemize-changes验证排除效果。

Mac用户执行rsync同步时,若未排除系统缓存和垃圾隐藏文件夹,会导致目标端堆积大量无用文件(如~/Library/Caches、~/.DS_Store、.fseventsd等),不仅浪费空间,还可能干扰后续增量比对甚至触发误删逻辑。
用--exclude参数精准排除常见系统缓存与隐藏垃圾
rsync本身不自动过滤这些目录,必须显式声明。以下命令组合覆盖95%以上高频干扰项:
rsync -av --exclude='.DS_Store' --exclude='.fseventsd' --exclude='.Spotlight-V100' --exclude='.Trashes' --exclude='Library/Caches' --exclude='Library/Logs' --exclude='Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2' /源路径/ /目标路径/
注意:所有exclude路径均为相对路径,以源路径为基准;【Library/Caches必须写成全小写,且不加波浪号~,因为rsync在解析时不会展开shell变量】。
批量排除:用--exclude-from从文件读取规则列表
当排除项超过5个,或需复用规则时,把模式写入文本文件更可靠,避免命令行过长出错。
第一步:用nano创建排除列表文件
nano ~/rsync-exclude.txt
第二步:粘贴以下内容(每行一个模式,支持通配符):
.DS_Store
.fseventsd
.Spotlight-V100
.Trashes
Library/Caches/**
Library/Logs/**
Library/Containers/**/Data/Library/Caches/**
tmp/**
*.tmp
第三步:在rsync中调用该文件
rsync -av --exclude-from=~/rsync-exclude.txt /源路径/ /目标路径/
这一步的关键是【**表示递归匹配任意层级子目录,比如能同时排除~/Library/Caches/com.apple.Safari/Cache.db和~/Library/Containers/com.google.Chrome/Data/Library/Caches/】。
安全加固:先用--dry-run验证排除效果
方法一:模拟执行,只看哪些文件会被跳过
rsync -av --dry-run --exclude='.DS_Store' --exclude='Library/Caches' /源路径/ /目标路径/
方法二:加--itemize-changes参数,输出每行前缀标记含义(如>fc表示文件内容变更,.f.表示仅时间戳不同,*deleting表示将被删除)
rsync -av --itemize-changes --dry-run --exclude='Library/Caches' /源路径/ /目标路径/
看到类似“.d..t...... Library/Caches/”的行,就说明Caches目录已被成功跳过——这个t代表“time unchanged”,说明rsync已识别并忽略该路径,没把它当作待同步对象。











