rsync 增量同步速查表 - 备份与远程传输命令大全
rsync 的价值在于只传变化的部分,并把目标端镜像成与源端一致的文件树,所以日志备份和站点发布几乎都以它为主力。但危险也来自同一个特性:加 --delete 时源端一次误删或误挂载,目标端就会跟着清空。所以每次都要先用 -n 或 --dry-run 预览,再决定是否真正同步;--itemize-changes 会逐行列出将被传输、创建或删除的文件,核对无误再执行是硬习惯。另一个高频坑是结尾斜杠:src/ 同步目录内容,src 同步目录本身,写错一层就多套一层目录。表里按传输、显示、过滤、备份、归档分组收列参数,重点是搞清楚 -a、-z、--partial、--checksum 各自解决什么场景。
基础同步 4
rsync -avz ./src /dest同步 src 目录到 dest(含 src 本身)
rsync -avz ./src/ /dest同步 src 内容到 dest(不含 src 本身)
rsync -avz user@host:/remote /local从远程拉取到本地
rsync -avz /local user@host:/remote推送本地到远程
传输选项 5
-z, --compress传输时压缩数据
-n, --dry-run模拟执行,不实际传输
--partial保留部分传输的文件(支持断点续传)
--bwlimit=1M限制带宽为 1MB/s
-e ssh指定使用 SSH 作为传输通道
显示选项 6
-v, --verbose详细输出
-q, --quiet静默模式
--stats显示传输统计信息
-h, --human-readable人类可读的数字格式
--progress显示传输进度
-P同 --partial --progress
跳过与过滤 5
-u, --update跳过目标端更新的文件
-c, --checksum基于校验和跳过(而非时间+大小)
--exclude=.git排除 .git 目录
--exclude-from=.rsyncignore从文件读取排除规则
--include=*.txt包含特定文件
备份选项 4
-b, --backup备份覆盖的文件
--suffix=.bak备份文件后缀
--backup-dir=/backup备份到指定目录
--delete删除目标端多余文件(镜像同步)
归档模式 7
-a, --archive归档模式(-rlptgoD)
-r, --recursive递归处理目录
-l, --links保留符号链接
-p, --perms保留权限
-t, --times保留时间戳
-g, --group保留用户组
-o, --owner保留所有者
命令示例
部署前先干跑看会传什么
rsync -avzn --delete ./dist/ user@host:/var/www/app/
# 确认输出无误后去掉 n-n 是 dry-run,最关键的一步。/dist/ 末尾的斜杠决定同步的是目录内容还是目录本身——写错会把文件多套一层。
输出
sending incremental file list index.html main.4f3a2b.js deleting old-vendor.js sent 1,204 bytes received 78 bytes 2,563.00 bytes/sec total size is 512,384 speedup is 39.08
排除不该传的目录并保留被覆盖文件的备份
rsync -avz --delete \
--exclude=".git" --exclude="node_modules" \
--backup --backup-dir=/var/backup/app \
./dist/ user@host:/var/www/app/--backup 配合 --backup-dir 把被覆盖的旧文件挪到指定目录,回滚有据可查。--delete 会删目标端多余文件,务必先 dry-run。
断点续传大文件并限制带宽
rsync -avzP --bwlimit=1000 user@host:/data/bigfile.iso .-P 等于 --partial --progress,断了重连能续传。--bwlimit 单位是 KB/s,1000 即约 1MB/s,避免打满链路影响其他业务。
输出
sending incremental file list bigfile.iso 1,073,741,824 12% 12.00M 0:01:21 eta 0:01:10
常见坑与注意事项
- 源目录末尾的斜杠决定同步目录内容还是目录本身,漏写斜杠会得到多一层嵌套的路径。
- --delete 会删除目标端源目录里不存在的文件,加错路径等于远程删库,务必先 -n 干跑。
- rsync 无内置备份,误覆盖后原文件已被替换;重要目录配合 --backup 或先用 tar 归档。
- rsync 默认按「大小 + 修改时间」判断差异,时间戳被改动的文件会被无谓重传。
- 传输中断且未用 -P 时残缺文件会保留在目标端且被当作完整文件,下次同步不会修复。
提示
- src/ 和 src 的区别:带斜杠同步内容,不带同步目录本身。
- -a 是 -rlptgoD 的简写,保留几乎所有文件属性。
- --delete 会删除目标端多余文件,首次使用建议加 -n 模拟。
- rsync 基于增量传输,只传差异部分,效率高。
- 远程传输默认用 SSH,可用 -e 指定其他命令或参数。
- --exclude 以 / 锚定路径才匹配目录:--exclude=/node_modules 不会误伤 src/node_modules。
- rsync -avzP 远端:/data/ ./data/ 中的 P 等于 --partial --progress,中断后重跑可续传而不重传整文件。
- 带 --delete 时建议加 --max-delete=10,一次删超过 10 个文件就中止,可拦下手滑造成的批量误删。
由 巧匠 维护
公开更新于 2026年7月19日,内容持续校对官方文档。