rsync文件同步:高效传输大量文件
scp传文件太慢?每次都要全量传?
试试rsync,只传输变化的部分,快得多。
基本用法
rsync -avz 源目录/ 目标目录/
参数说明:
- a:归档模式,保留权限、时间等
- v:显示详情
- z:压缩传输
本地同步
# 同步目录
rsync -avz /source/ /backup/
# 同步单个文件
rsync -avz file.txt /backup/
注意:源目录后面带不带/有区别:
/source/:同步目录里的内容/source:同步目录本身
远程同步
推送到远程:
rsync -avz /local/dir/ user@remote:/remote/dir/
从远程拉取:
rsync -avz user@remote:/remote/dir/ /local/dir/
常用参数
# --delete:删除目标端多余的文件
rsync -avz --delete /source/ /backup/
# --exclude:排除某些文件
rsync -avz --exclude='*.log' --exclude='node_modules' /source/ /backup/
# --exclude-from:从文件读取排除规则
rsync -avz --exclude-from=exclude.txt /source/ /backup/
# --dry-run:只显示会做什么,不实际执行
rsync -avzn /source/ /backup/
# --progress:显示进度
rsync -avz --progress /source/ /backup/
# -P:相当于--partial --progress,断点续传+显示进度
rsync -avzP /source/ /backup/
常用场景
场景1:备份代码
rsync -avz --exclude='node_modules' --exclude='.git' \
/home/project/ /backup/project/
场景2:同步网站文件
rsync -avz --delete dist/ root@server:/var/www/mysite/
场景3:增量备份
rsync -avz --backup --backup-dir=/backup/old \
/data/ /backup/current/
场景4:限速传输
# 限制带宽1MB/s
rsync -avz --bwlimit=1000 /source/ user@remote:/dest/
对比scp
| 特性 | scp | rsync |
|---|---|---|
| 增量传输 | ❌ | ✅ |
| 断点续传 | ❌ | ✅ |
| 删除多余文件 | ❌ | ✅ |
| 排除文件 | ❌ | ✅ |
| 压缩传输 | ❌ | ✅ |
rsync几乎全面碾压scp。
定时同步
结合crontab:
# 每天凌晨2点同步
0 2 * * * rsync -avz /data/ /backup/ >> /var/log/rsync.log 2>&1
同步脚本示例
#!/bin/bash
# backup.sh
SOURCE="/data/app"
DEST="root@backup-server:/backup/app"
LOG="/var/log/rsync.log"
echo "===== $(date) =====" >> $LOG
rsync -avz --delete \
--exclude='*.log' \
--exclude='tmp/' \
$SOURCE/ $DEST/ >> $LOG 2>&1
if [ $? -eq 0 ]; then
echo "同步成功" >> $LOG
else
echo "同步失败" >> $LOG
fi
多服务器同步
我用星空组网管理多台服务器,同步文件很方便:
#!/bin/bash
# 把代码同步到所有服务器
SERVERS="10.26.1.10 10.26.1.11 10.26.1.12"
SOURCE="/opt/app/"
for server in $SERVERS; do
echo "同步到 $server"
rsync -avz --delete $SOURCE root@$server:/opt/app/
done
不用配跳板机,直接用虚拟IP同步。
常见问题
Q:权限问题?
加sudo或者用root同步,或者加--no-perms忽略权限。
Q:网络中断了?
用-P参数支持断点续传:
rsync -avzP /source/ user@remote:/dest/
Q:软链接怎么处理?
默认保留软链接,加-L复制链接目标文件。
速查表
| 用途 | 命令 |
|---|---|
| 基本同步 | rsync -avz 源/ 目标/ |
| 远程同步 | rsync -avz 源/ user@host:目标/ |
| 删除多余 | rsync -avz --delete |
| 排除文件 | rsync -avz --exclude='*.log' |
| 显示进度 | rsync -avzP |
| 限速 | rsync -avz --bwlimit=1000 |
小结
rsync核心用法:
rsync -avz 源目录/ 目标目录/
常用加--delete和--exclude。
比scp更快更强,传输大量文件必备。
有问题评论区交流~

1174

被折叠的 条评论
为什么被折叠?



