rsync --delete 是什么
--delete 让目标端与源端保持一致:目标端存在而源端没有的文件会被删除。它适合镜像型同步,但把镜像当成备份就危险了——源端误删会顺着同步传到目标端,历史数据一并消失。使用前必须先用预演确认删除清单。
基本信息
| 作用 | 删除目标端在源端不存在的文件 |
|---|---|
| 配套选项 | --delete-excluded 连被排除文件也删;--delete-after 传输完成后再删 |
| 语义 | 让两侧内容一致,属于镜像而不是留底 |
| 安全前提 | 执行前用 -n 预演,路径与方向反复确认 |
安全使用顺序
安全使用顺序
rsync -avn --delete /data/ /backup/data/ # 1) 预演,核对删除清单
rsync -av --delete /data/ /backup/data/ # 2) 确认无误后执行
# 只删被排除的文件(默认保留)
rsync -av --delete --delete-excluded /data/ /backup/data/删除相关选项
| 选项 | 行为 | 注意 |
|---|---|---|
| --delete | 删除目标端多余文件 | 最常用,也最容易误伤 |
| --delete-excluded | 被排除的文件也一并删除 | 改变排除语义,升级脚本前需重新预演 |
| --delete-after | 传输完成后统一删除 | 减少传输过程中的目标端变动 |
| --delete-before | 扫描前先删除 | 可缓解目标端空间压力 |
| --max-delete | 限制单次删除数量 | 异常大量删除时能及时止损 |
典型使用场景
- 镜像站点目录:让备份端精确反映生产端当前状态,控制副本体积
- 共享目录同步:两侧保持一致,避免已下线的文件长期残留
- 发布目录更新:把新版本目录完整覆盖到目标机,删除旧版本残留文件
- 硬链接快照:与 --link-dest 配合,让每份快照目录呈现完整视图
- 清理策略:目标端磁盘吃紧时用一次完整镜像回收空间
镜像同步不是备份:源端误删会通过 --delete 同步过来,镜像副本之外仍需保留历史版本(如 --link-dest 快照或独立归档)。
预演输出中的删除行容易淹没在大量传输信息里,建议单独过滤关键字统计条数,删除量异常时先停下来排查源端路径是否挂载成功。