rsync 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
rsync——压缩归档与其他命令族(见压缩归档命令族)。相比 scp,它在大目录同步上优势明显。
rsync(remote sync,远程同步)的核心卖点是增量传输:只传源和目标之间"不一样"的那部分,而不是整个文件重传。配合断点续传、排除规则、限速,它是备份、镜像、部署分发的不二之选。
一、基础同步
rsync -av src/ dest/ # 本地目录同步(src/ 末尾 / 表示同步目录内容)
rsync -av dir/ user@host:/backup/ # 通过 ssh 同步到远程
rsync -av user@host:/var/log/ ./log/ # 远程拉到本地最容易错的是路径末尾的斜杠:
rsync a/ b/把 a 目录里的内容放进 b;rsync a b/则是把 a 这个目录本身放进 b(变成 b/a)。记住"带斜杠对内容,不带斜杠带目录"。-a(archive)是-rlptgoD的合集,递归、保符号链接、保权限/时间戳/属主,备份几乎必用;-v看进度。
二、增量与断点:rsync 的精髓
rsync -avP bigdir/ user@host:/data/ # -P = --partial --progress,断点续传+进度条
rsync -av --delete src/ dest/ # --delete 让 dest 镜像 src(多删少补)第一次传可能是全量,但第二次及以后只传变更文件(甚至文件内变更的数据块),这是 rsync 比 scp 快十倍的原因。
-P在传大文件中断后重跑能续上,不必从头来。--delete是"镜像"语义:源里删了的文件,目标也删——做精确备份时用,但务必确认路径,否则可能把目标上独有的文件清掉。
三、排除与过滤
rsync -av --exclude="*.log" --exclude="node_modules" src/ dest/
rsync -av --exclude-from=ex.txt src/ dest/和 tar 的 --exclude 思路一致,同步代码时排除
node_modules、.git、tmp能省大量传输。规则可写进文件用--exclude-from管理,多环境复用方便。
四、限速与压缩
rsync -av --bwlimit=2000 src/ user@host:/data/ # 限速 2000 KB/s
rsync -avz src/ user@host:/data/ # -z 传输中压缩(慢网络有用)
--bwlimit单位 KB/s,和scp -l(Kbit/s)不同,别混。带宽紧张时限速避免把链路打满影响业务。-z在两端 CPU 有余、网络是瓶颈时提速明显;若瓶颈在本机 CPU,压缩反而更慢。
五、rsync vs scp:怎么选
| 维度 | rsync | scp |
|---|---|---|
| 传输 | 增量(只传差异) | 整文件 |
| 断点续传 | 支持(-P) | 不支持 |
| 镜像(删多余) | --delete | 无 |
| 排除规则 | 丰富 | 简单 |
| 上手 | 参数多 | 像 cp 简单 |
一句话:偶尔传个小文件用 scp;要同步、备份、频繁传大目录,用
rsync。本项目部署时常用rsync -avz --delete把构建产物推到服务器站点目录,增量同步让每次发布很快。
六、实战:部署目录增量发布
rsync -avz --delete --exclude=".git" ./dist/ user@web:/var/www/site/这条命令把本地 dist/(构建产物)增量同步到线上站点目录,--delete 保证线上和本地一致(删掉的旧文件也清理)、排除 .git 不传仓库元数据。比 scp -r 每次全量传快得多,是静态站点发布的标配。
一句话总结
rsync = 增量同步(只传差异块),-a 归档保属性、-v 看进度、-P 断点续传+进度条、--delete 镜像(慎防误删)、--exclude 排除、--bwlimit 限速;路径末尾斜杠决定"内容还是目录本身"。大目录/频繁同步/备份用 rsync,偶尔小文件传才用 scp。