rsync 排除文件或目录需用相对路径,单个排除用--exclude,批量用--exclude-from指定规则文件,配合-n模拟运行可避免误操作。

在 Linux 中用 rsync 排除指定文件或目录,关键在于理解路径是相对源目录的,且规则必须写对位置和格式。不是加个“/”就能生效,也不是随便写个绝对路径就行。
单个排除:用 --exclude 直接指定
语法简单,适合少量要跳过的项:
- --exclude="logs" → 排除源目录下名为 logs 的整个目录(含子目录和内容)
- --exclude="*.tmp" → 排除所有以 .tmp 结尾的文件
- --exclude=".git/" → 排除 .git 目录(末尾斜杠更明确表示目录)
- 错误写法:--exclude="/var/log" 或 --exclude="/logs" —— rsync 忽略绝对路径,只认相对源起点的路径
批量排除:用 --exclude-from 指向规则文件
当要跳过几十个目录、日志、缓存、构建产物时,命令行堆 --exclude 容易出错。推荐建一个纯文本清单文件,比如 exclude.list:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 每行一条规则,全部用相对路径(以你指定的源目录为根)
- 支持通配符:如 node_modules/、dist/、*.log、.DS_Store
- 文件可放在任意位置,调用时用绝对路径引用,例如:
rsync -aPh --delete --exclude-from=/home/user/exclude.list /data/app/ /backup/app/
配合 --delete 时注意保留重要数据
如果同步时加了 --delete(自动清理目标端多余文件),排除规则仍会生效,但需留意:
- 被 --exclude 跳过的源内容,不会传过去,自然也不会被 --delete 删掉
- 想确保某些目录在目标端“永远不碰”,可在排除的同时避免 --delete 影响它们,或改用 --delete-after 减少误删风险
- 正式执行前务必先加 -n(dry-run)模拟:例如 rsync -avn --exclude="logs" /src/ /dst/,看输出里是否真没 logs 下的文件
常见该排除的典型项
这些内容通常体积大、易变、无备份价值,重装或重建即可:
- 依赖目录:node_modules/、vendor/
- 构建产出:dist/、build/、out/
- 运行时数据:logs/、tmp/、cache/、uploads/
- 临时与隐藏文件:*.tmp、*.swp、.git/、.DS_Store、__pycache__/

















