同步远程文件和目录rsync
什么是 rsync?
rsync(Remote Sync,远程同步)是 Linux 下最常用的文件与目录同步工具。
可以用一个通俗的比喻来理解它:
普通的
cp(复制)或者scp(远程拷贝)就像搬家:不管你改没改东西,每次都把整个屋子所有的箱子全部重新搬一次。rsync 像智能记账员:它在传输前会先对比两边的文件,只传输修改过、新增的文件,甚至只传输一个大文件里被改动的几个字节(这叫增量同步)。如果两边文件一模一样,它直接跳过,速度极快且极其省带宽。
一、最核心的语法结构
无论是本地复制还是远程传输,语法规则都非常直观:
Bash
rsync [选项] 源路径 目标路径
最常用的万能参数组合:-avz
日常使用 90% 的场景只需要记住这一组组合参数:
-a(archive,归档模式):核心参数,相当于同时开启了保留文件权限、属主、修改时间、软链接,并且递归同步所有子目录。-v(verbose,详细输出):在终端打印当前正在同步哪些文件。-z(compress,压缩传输):传输数据时先压缩,适合跨网络同步,能显著节省带宽。
二、典型使用场景与命令
1. 本地目录同步(做本地备份)
把 /data/web/ 目录同步备份到 /backup/web/:
Bash
rsync -avz /data/web/ /backup/web/
2. 远程同步(推送到远程服务器)
把本地的配置或代码推送到远程服务器(基于 SSH,默认端口 22):
Bash
rsync -avz /data/web/ root@192.168.10.20:/data/web/
3. 远程拉取(从远程服务器下载备份)
把远程机器上的数据同步拉回到本地:
Bash
rsync -avz root@192.168.10.20:/data/web/ /backup/web/
三、初学者最容易踩的两个“大坑”
坑 1:源目录末尾带不带斜杠 /(完全不同!)
这是 rsync 设计上最容易让新手困惑的一点:
带斜杠
/:代表“只同步目录里面的内容”。Bash
rsync -avz /src/ /dst/ # 结果:/dst/ 直接包含 a.txt, b.txt不带斜杠:代表“把整个目录连同名字一起同步过去”。
Bash
rsync -avz /src /dst/ # 结果:/dst/ 下会生成一个 /dst/src/ 文件夹
坑 2:rsync 默认“只增不删”
如果本地删除了一个文件 test.txt,直接运行 rsync -avz 同步到目标机,目标机上的 test.txt 依然存在。
如果需要两边完全镜像一致(本地删了什么,远端也跟着删什么),必须加上
--delete参数:Bash
rsync -avz --delete /src/ /dst/注意:使用
--delete时务必确认源路径和目标路径没有填反,否则可能误删目标机上的数据。
四、防翻车技巧:模拟运行(Dry Run)
在执行包含 --delete 或大规模数据同步前,可以加上 -n(或 --dry-run):
Bash
rsync -avzn --delete /src/ /dst/
这个命令会完整模拟一次同步流程并打印出来,但不会在硬盘上改动任何真实文件。确认打印出来的文件变动符合预期后,去掉 -n 再正式执行。
同步远程文件和目录rsync
https://originspace.work/archives/wei-ming-ming-wen-zhang
评论