rsync用--exclude参数可直接排除文件,按源目录相对路径匹配,支持单个、多个(重复参数/大括号/外部文件)及通配符排除,规则基于相对路径且顺序影响优先级。

直接用 --exclude 参数加文件名(相对路径)就能排除指定文件,不需要额外配置或脚本。
排除单个文件
rsync 默认按源目录的相对路径匹配。比如要同步 src/ 目录,但跳过 src/report.log,命令写成:
rsync -a src/ dst/ --exclude='report.log'
注意:这里写的是 report.log,不是完整路径 src/report.log —— 因为 rsync 会自动以源目录为基准解析路径。
排除多个文件
有三种常用写法,选一种即可:
- 重复使用
--exclude:rsync -a src/ dst/ --exclude='temp.txt' --exclude='notes.bak' --exclude='cache.json' - 用大括号一次性列出(中间不加空格,用逗号分隔):
rsync -a src/ dst/ --exclude={'temp.txt','notes.bak','cache.json'} - 把所有要排除的文件写进一个文本文件(如
exclude-list.txt),每行一个,然后用:rsync -a src/ dst/ --exclude-from='exclude-list.txt'
排除带通配符的文件
支持简单模式匹配,适合批量排除:
-
--exclude='*.tmp'→ 跳过所有 .tmp 文件 -
--exclude='log_202[4-6]*.log'→ 排除 2024–2026 年的日志(bash 扩展,需 shell 支持) -
--exclude='old_*/'→ 排除所有以old_开头的目录(末尾斜杠表示目录)
注意:通配符只作用于文件名或最后一级路径,不递归匹配中间层级。
排除时的路径和优先级要点
关键细节决定是否生效:
- 排除规则基于源路径的相对位置,不是绝对路径
-
--include和--exclude可共存,但顺序重要:先写的规则先生效;通常建议--include放前面,--exclude放后面 - 如果同时用了
--exclude-from和多个--exclude,所有规则合并处理,无隐含优先级,按实际书写顺序逐条判断 - 排除目录时加不加
/会影响行为:--exclude='logs'会跳过整个 logs 目录;--exclude='logs/'效果相同,但更明确表示是目录











