`Rsync` 使用教程

Rsync 命令详解与实战

一、rsync 简介

rsync 是一个高效的文件同步工具,支持本地和远程文件/目录同步。它只传输差异部分(增量同步),因此速度极快,常用于:

  • 服务器文件备份
  • 网站部署
  • 目录镜像
  • 定时增量同步

二、rsync 基本语法

1
rsync [选项] 源目录 目标目录

常用选项

选项 说明
-a 归档模式,等同于 -rlptgoD(保留权限、时间等)
-v 显示详细输出
-z 传输时压缩数据
-h 人性化显示文件大小
--delete 删除目标目录中源目录没有的文件(镜像同步)
--exclude 排除指定文件或目录
-P 显示进度并支持断点续传
-n 模拟运行,不实际执行(Dry Run)
--progress 显示传输进度

三、本地同步

同步两个目录

1
rsync -avz /path/to/source/ /path/to/destination/

关键点:源目录末尾的 / 有讲究:

  • source/ → 复制 source 目录里面的内容
  • source → 复制 source 目录本身

四、远程同步

通过 SSH 同步

1
2
3
4
5
# 推送到远程服务器
rsync -avz -e ssh /local/path/ user@remote:/remote/path/

# 从远程服务器拉取
rsync -avz -e ssh user@remote:/remote/path/ /local/path/

指定 SSH 端口

1
rsync -avz -e "ssh -p 2222" /local/path/ user@remote:/remote/path/

五、实战案例

1. 网站部署(最常用)

1
rsync -avz --delete --exclude '.git' --exclude 'node_modules' ./dist/ user@your-server:/var/www/html/

2. 服务器备份

1
rsync -avz -e ssh --delete /data/ backup@backup-server:/backup/data/

3. 增量同步(只同步变化部分)

1
rsync -avz --delete /source/ /destination/

4. 模拟运行(安全起见)

1
rsync -avzn /source/ /destination/  # -n 预览,不执行

5. 限速同步(节省带宽)

1
rsync -avz --bwlimit=1000 /source/ /destination/  # 限速 1MB/s

六、排除文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 排除 .git 和 node_modules
rsync -avz --exclude '.git' --exclude 'node_modules' /source/ /dest/

# 排除多个模式
rsync -avz \
  --exclude '.git' \
  --exclude 'node_modules' \
  --exclude '*.log' \
  --exclude 'tmp/*' \
  /source/ /dest/

七、常用别名(提速)

~/.bashrc~/.zshrc 中添加:

1
2
3
4
5
# 快速部署
alias deploy='rsync -avz --delete --exclude ".git" --exclude "node_modules"'

# 快速备份
alias backup='rsync -avz --delete -e ssh'

八、rsync vs scp

特性 rsync scp
增量传输 ✅ 只传差异 ❌ 全量传输
速度 较慢
断点续传 ✅ 支持 ❌ 不支持
删除目标多余文件 ✅ 可选 ❌ 不支持
用途 同步/备份 复制

九、常见问题

Q: 同步后权限丢失?

1
2
# 使用 -a 保留权限
rsync -a /source/ /dest/

Q: 符号链接不同步?

1
2
# -a 包含 -l,会同步符号链接
rsync -av /source/ /dest/

Q: 大文件同步中断?

1
2
# 使用 -P 断点续传
rsync -avP /large-file/ /dest/

十、总结

rsync 是服务器运维必备工具,核心命令就几个:

  • rsync -av source/ dest/ 本地同步
  • rsync -av -e ssh source/ user@host:dest/ 远程同步
  • --delete 镜像同步
  • --exclude 排除文件
  • -n 先预览再执行

记住:先 -n 预览,确认无误后再去掉 -n 执行,这是保命习惯。

Gear(夕照)的博客。记录开发、生活,以及一些不足为道的思考……