linux rsync同步文件 作者:马育民 • 2021-09-20 17:37 • 阅读:10103 # 说明 `rsync` 的目的是实现 **本地主机** 和 **远程主机** 上的 **文件同步** 默认当 **文件大小** 改变、或 **修改时间** 改变,就认为需要同步 ### 同步方式 - 本地发送到远程 - 远程下载到本地 - 实现本地不同路径下文件的同步 ### 与 scp的区别 1. 在本地电脑A,不能 将 远程电脑B 的文件 同步到 远程电脑C ,scp可以实现发送文件 2. 第一次使用 `rsync` 同步文件,与 `scp` 类似,都是将 **所有文件** 发送 或 下载 3. 再次使用 `rsync` 同步文件,只将 **差异文件** 发送 或 下载,scp是发送所有文件 # 安装 ### centos ``` yum install -y rsync ``` # 语法 ``` rsync -av 本地文件路径 用户名@ip:远端保存目录 ``` **解释:** - `-r`:表示递归,即包含子目录 - `-a`:归档模式拷贝。递归同步,还可以同步元信息(比如修改时间、权限等),可替代 `-r` - `-v`:显示复制过程 更多参数说明,见: http://www.ruanyifeng.com/blog/2020/08/rsync.html # 例子 ### 同步 执行下面命令: ``` rsync -av /program/jdk1.8.0_202 root@hadoop3:/program ``` 将本地 `/program/jdk1.8.0_202` 目录 同步到远程 `/program/` 目录 `rsync` 命令不需要事先在 **远端电脑** 创建 `/program` 文件夹 ### 注意 不要像下面这种: ``` rsync -av /program/jdk1.8.0_202 root@hadoop2:/program/jdk1.8.0_202 ``` 在远端电脑路径指定 `jdk1.8.0_202`,否则会将 本地 `jdk1.8.0_202` 同步到 远程 `/program/jdk1.8.0_202/jdk1.8.0_202` 目录下 如果要执行 远端文件夹名,可以用下面这种,本地路径后面多了一个 `/`: ``` rsync -av /program/jdk1.8.0_202/ root@hadoop2:/program/jdk1.8.0_202 ``` ### 查看 登录 远端电脑,查看 `/program` 文件夹 ``` cd /program ``` ``` ll ``` 可以看到 `jdk1.8.0_202` 目录 # 测试同步差异文件 登录 `hadoop3` 虚拟机,删除 `/program/jdk1.8.0_202/bin` 目录 ``` rm -rf /program/jdk1.8.0_202/bin ``` ### 再次同步 登录 `hadoop1` 虚拟机,执行下面命令: ``` rsync -av /program/jdk1.8.0_202 root@hadoop3:/program/ ``` 只同步 `bin` 目录下的文件 # 例子 可以使用 `*` 通配符,同步某目录下的所有文件 ``` rsync -av /program/* root@hadoop3:/program/ ``` 原文出处:http://malaoshi.top/show_1IX1tgTe4McS.html