今天分享一个 Linux/Unix 下非常经典的文件同步工具,用一句话概括就是:只传输变化的部分,实现高效同步。比 cp、scp 更快、更智能。
一、rsync 是干嘛的?
你可以把它理解成:
👉 “聪明版复制工具”
它的特点是:
- 只复制新增或修改的文件
- 支持本地 → 本地
- 支持本地 → 远程(SSH)
- 支持远程 → 本地
- 可以做备份 / 镜像 / 部署
二、基本语法
rsync [选项] 源路径 目标路径
例如:
rsync -av file.txt /backup/
三、最常用参数(重点)
1️⃣ -a(归档模式)
-a = -r + -l + -p + -t + -g + -o
简单理解:
👉 递归复制 + 保留权限/时间等信息
2️⃣ -v(verbose)
显示详细过程:
-v
3️⃣ -z(压缩)
适合远程传输:
-z
4️⃣ —delete
👉 让目标目录和源目录完全一致(危险但好用)
rsync -av --delete src/ dest/
说明:
- 源有 → 保留
- 源没有 → 删除目标里的
5️⃣ —progress
显示传输进度:
rsync -av --progress src/ dest/
6️⃣ -n(干跑 / 预演)
👉 非常重要,用来避免误删!
rsync -av --delete -n src/ dest/
不会真的执行,只是模拟。
四、最常见使用场景
📁 1. 本地目录同步
rsync -av /home/user/data/ /backup/data/
👉 注意 / 很关键!
| 写法 | 含义 |
|---|---|
data/ | 复制目录里的内容 |
data | 连目录一起复制 |
🌐 2. 同步到远程服务器
rsync -avz /local/path user@192.168.1.10:/remote/path
👉 默认走 SSH
🌐 3. 从远程拉数据
rsync -avz user@192.168.1.10:/remote/path /local/path
🔐 4. 指定 SSH 端口
rsync -avz -e "ssh -p 2222" src/ user@host:/dest/
🧹 5. 做镜像备份(完全同步)
rsync -av --delete /data/ /backup/
👉 常用于:
- 网站备份
- NAS 同步
- Docker 数据备份
五、实用技巧
✅ 排除文件
rsync -av --exclude="node_modules" src/ dest/
多个排除:
--exclude="*.log"
--exclude=".git"
✅ 限速
rsync -av --bwlimit=1000 src/ dest/
(单位 KB/s)
✅ 断点续传
rsync -av --partial src/ dest/
✅ 查看差异(不复制)
rsync -avnc src/ dest/
六、常见坑(很重要)
⚠️ 1. / 的区别(经典坑)
rsync -av dir/ backup/
👉 复制 dir 里面的内容
rsync -av dir backup/
👉 复制 整个 dir 目录
⚠️ 2. —delete 很危险
一旦写反:
rsync -av --delete backup/ data/
👉 可能把你数据删光 😅
✔ 建议:
先加 -n 测试!
⚠️ 3. 权限问题
有些文件需要 root:
sudo rsync -av /etc/ backup/
七、一个真实常用命令(推荐记住)
rsync -avz --delete --progress /data/ user@server:/backup/
👉 含义:
- 同步数据
- 自动压缩
- 显示进度
- 保持一致
总结一句话
👉 rsync = 高效 + 增量 + 可远程 + 可镜像的复制工具
实战(把本地静态博客同步到服务器)
❯ rsync -rvz --delete ./dist/ xtp@xiaotupo.com:/home/xtp/xiaotupo.com/
scp -r .\public\* xtp@xiaotupo.com:/home/xtp/xiaotupo.com