一、rsync 简介
rsync 是一个高效的文件同步工具,支持本地和远程文件/目录同步。它只传输差异部分(增量同步),因此速度极快,常用于:
二、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 执行,这是保命习惯。