本期摘要
scp每次复制都传整个文件,文件大了就慢。rsync只传文件的变化部分,而且支持断点续传、压缩传输、排除指定目录。本文从零开始,教你rsync的常用场景:本地同步、远程同步、只同步新增文件、排除特定目录、限速传输、删除源端不存在的文件。以及ssh端口非22时的配置方法。读完你就能用rsync替代scp,在备份和分发文件时省下大量时间。
rsync是什么?
rsync = remote sync,远程同步工具。核心特性是:增量传输——只传输文件变化的部分,不是整个文件。
使用场景:
本地目录备份
远程文件同步
增量备份
文件分发
最常用的5种姿势
1. 本地同步
bash
# 同步目录(复制目录内所有文件) rsync -av /source/ /dest/ # 同步目录本身(连同目录一起复制) rsync -av /source /dest/
注意/的区别:
/source/表示复制目录内的内容/source表示复制目录本身
2. 远程同步(推送)
bash
# 将本地文件推送到远程 rsync -av /local/dir/ user@remote:/remote/dir/ # 指定SSH端口 rsync -av -e "ssh -p 2222" /local/dir/ user@remote:/remote/dir/
3. 远程同步(拉取)
bash
# 从远程拉取到本地 rsync -av user@remote:/remote/dir/ /local/dir/
4. 显示进度
bash
rsync -av --progress largefile.zip user@remote:/backup/
--progress显示传输进度条。
5. 删除目标端多余文件
bash
rsync -av --delete /source/ /dest/
确保目标目录和源目录完全一致,删除目标端有但源端没有的文件。
进阶技巧
排除指定目录/文件
bash
# 排除单个目录 rsync -av --exclude="cache" /source/ /dest/ # 排除多个目录 rsync -av --exclude="cache" --exclude="logs" /source/ /dest/ # 使用排除文件列表 rsync -av --exclude-from="exclude.txt" /source/ /dest/
exclude.txt内容示例:
text
.git/ node_modules/ *.log tmp/
限制传输带宽
bash
rsync -av --bwlimit=1000 /source/ user@remote:/dest/
--bwlimit单位KB/s,上例限制为1MB/s,避免占满带宽影响业务。
压缩传输
bash
rsync -avz /source/ user@remote:/dest/
-z在传输时压缩,适合文本文件(日志、配置)。
断点续传(适合大文件)
bash
rsync -avP --append-verify largefile.zip user@remote:/dest/
-P等于--partial --progress,支持断点续传。
只同步新增文件(不删除目标端)
bash
rsync -avu /source/ /dest/
-u表示只更新目标端比源端旧的文件。
模拟运行(不实际执行)
bash
rsync -av --dry-run /source/ /dest/
先看看会传输哪些文件,确认无误再去掉--dry-run。
真实场景
场景1:把代码部署到生产服务器
bash
rsync -avz --exclude=".git" --exclude="node_modules" ./ user@prod:/app/
场景2:每天增量备份数据库导出目录
bash
rsync -av --delete /data/backup/ /backup/remote/
--delete保证远程备份和本地完全一致,删掉本地已不存在的旧备份。
场景3:从一台服务器同步日志到日志中心
bash
rsync -avz --bwlimit=5000 /var/log/ logserver:/log/$(hostname)/
限速5MB/s,避免影响业务。
场景4:恢复上一次的完整备份
bash
rsync -av /backup/2026-05-12/ /data/恢复目录/
rsync vs scp 对比
| 特性 | rsync | scp |
|---|---|---|
| 增量传输 | ✅ 只传变化部分 | ❌ 每次传整个文件 |
| 断点续传 | ✅ | ❌ |
| 排除目录 | ✅ | ❌ |
| 压缩传输 | ✅ | ❌ |
| 保留属性 | ✅ | ✅ |
| 速度(大文件首次) | 略慢 | 快 |
| 速度(增量) | 极快 | 重新传一遍 |
结论:
首次传输或小文件:两者差别不大
增量同步或大文件:rsync完胜
常用参数速查
| 参数 | 含义 |
|---|---|
-a | 归档模式(保留权限、时间戳),等同于-rlptgoD |
-v | 显示详细信息 |
-z | 压缩传输 |
-P | 显示进度+支持断点续传 |
--delete | 删除目标端多余文件 |
--exclude | 排除指定模式 |
--bwlimit | 限制带宽(KB/s) |
--dry-run | 模拟运行,不实际传输 |
-u | 只更新目标端较旧的文件 |
-e | 指定远程shell(如ssh -p端口) |
下期预告
《每日一命令23:ansible——批量执行命令神器》