rsync 增量同步速查表 - 备份与远程传输命令大全

rsync 的价值在于只传变化的部分,并把目标端镜像成与源端一致的文件树,所以日志备份和站点发布几乎都以它为主力。但危险也来自同一个特性:加 --delete 时源端一次误删或误挂载,目标端就会跟着清空。所以每次都要先用 -n 或 --dry-run 预览,再决定是否真正同步;--itemize-changes 会逐行列出将被传输、创建或删除的文件,核对无误再执行是硬习惯。另一个高频坑是结尾斜杠:src/ 同步目录内容,src 同步目录本身,写错一层就多套一层目录。表里按传输、显示、过滤、备份、归档分组收列参数,重点是搞清楚 -a、-z、--partial、--checksum 各自解决什么场景。

系统与运维·共 31 条命令·最后更新 2026-07-19
rsync同步备份文件传输

基础同步 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日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们