要实现目标目录与源目录的镜像同步,必须使用 rsync -av --delete 源/ 目标/,其中源路径末尾斜杠表示同步内容而非目录本身,--delete 删除目标端多余文件,配合 --dry-run 验证和 --exclude 保护本地文件。

要让目标目录与源目录保持绝对一致的镜像状态,核心是使用 --delete 参数,并配合正确的同步模式和路径写法。
必须加 --delete 且明确同步方向
rsync 默认只做“单向复制”,不会删除目标端多余文件。启用镜像效果的关键一步,就是显式加上 --delete。它会让 rsync 在同步完成后,扫描目标目录,把源目录里没有、但目标目录里存在的所有匹配文件或子目录全部删掉。
- 命令格式固定为:
rsync -av --delete 源/ 目标/ - 注意源路径末尾的 /:它表示“同步该目录下的内容”,而不是整个目录本身;不加斜杠会把源目录名也同步进去,影响 exclude 路径匹配和删除逻辑
- 方向不可反:镜像是“以源为权威”,所以一定是源 → 目标;反过来会导致源被清空
用 --dry-run 先验证再执行
--delete 是不可逆操作,误配可能直接删掉关键配置或数据。强烈建议每次正式运行前,先加 --dry-run(或 -n)模拟执行:
- 它会完整列出将要传输、更新、删除的文件,但不做任何实际改动
- 重点检查“deleting xxx”行是否包含你不希望删除的文件
- 确认无误后再去掉 --dry-run,真正执行
排除本地专属文件,避免被误删
镜像同步时,如果目标端有本地独有配置(如 .env、local.conf、secrets.yaml),它们不在源目录中,--delete 默认会把它们删掉。
- 用 --exclude 显式声明这些文件,例如:
--exclude='.env' --exclude='config/local/' - 所有 --exclude 参数必须写在 源路径和目标路径之间,顺序错就失效
- 排除规则基于目标端的相对路径:比如同步
/app/,那么--exclude='.env'就指/app/.env - 不要用 --delete-excluded:它会把被 exclude 的文件也从目标端删掉,违背保护初衷
推荐搭配的常用选项
生产环境建议组合使用以下参数,兼顾安全、可读和完整性:
- -a:归档模式,保留权限、属主、时间戳等元信息
- -v:显示详细过程,便于排查
- --delete:实现镜像一致性
- --dry-run:首次或变更后必加,确认行为
- --exclude:保护本地敏感文件











