## rsync用法
`rsync`是一款同步文件的工具,可以在本地文件夹之间互相同步文件,也可以同步远程服务器文件,既可单向同步,也可双向同步
#### 安装
``` yum install rsync ```
#### 参数
`源路径`:被同步的文件或文件夹路径 `目标路径`:存放`源路径`中发送过来的文件或文件夹 `-v`:查看每次同步文件的过程 `-r`:递归路径内的文件与子文件夹 `-a`:可以代替`-r`,除了递归之外,还可以同步元信息(比如修改时间、权限等) `-n`:模拟执行文件同步,可做测试用,可以看到同步文件后的结果,不会真的同步文件 `--delete`:同步目录中被删除的文件与文件夹,如果目标目录中包含源目录中不存在的文件与文件夹,会被删除 `--append`:断点续传 `--append-verify`:可以代替`--append`,断点续传完毕后,还会对文件做校验,如果校验失败,就重传
#### 场景
本地服务器IP:192.168.1.199
目标服务器IP:192.168.1.200
文件列表:
``` /opt/ /opt/abc.txt /opt/www/ /opt/www/a.txt /opt/data/ ```
#### 本地同步
每次同步文件,先写源路径,最后一个是目标路径,参数有必要的时候适当的加一下
###### 同步文件
同步文件可以跟`cp`一样,将`/opt/abc.txt`复制一份出来,变一个名字,路径为`/opt/bcd.txt`
``` rsync /opt/abc.txt /opt/bcd.txt ```
将`/opt/abc.txt`复制到,文件夹`/opt/data`下,目标路径如果是文件夹,结尾可用`/`结尾,也可不用
``` # 文件夹/opt/data不用 / 结尾 rsync /opt/abc.txt /opt/data # 文件夹/opt/data用 / 结尾 rsync /opt/abc.txt /opt/data/ ```
###### 同步文件夹
源目录末尾不带`/`,是将自身整个同步到目标路径下,带递归,如`-a`与`-r`
将`/opt/www`整个同步到`/opt/data`,同步后`/opt/data`下会有一个文件夹`www`
``` rsync -a /opt/www /opt/data/ ```
源目录末尾带`/`,是将自身目录中的文件与子文件夹整个同步到目标路径下
``` rsync -a /opt/www/ /opt/data/ ```
###### 排除文件
同步文件时有些文件不需要一起同步,可使用参数`--exclude`,`*`为模糊匹配
将`/opt/www/`下的文件全部整个同步到`/opt/data/`下,不要同步扩展名为`.txt`的文件
``` rsync -a --exclude='*.txt' /opt/www/ /opt/data/ ```
如果是被同步的目录中的子文件夹下的某种文件,比如不要同步`/opt/www/abc/`下的`.md`文件
``` rsync -a --exclude='abc/*.md' /opt/www/ /opt/data/ ```
`--exclude`可以写多个,但是如果使用`bash`的方式只能写一个
``` rsync -a --exclude={'*.txt','abc/*.txt'} /opt/www/ /opt/data/ ```
`--exclude`的内容也可以写到配置文件里,每行一个规则
``` rsync -a --exclude-from='exclude-file.txt' /opt/www/ /opt/data/ ```
`exclude-file.txt`内容:
``` *.txt abc/1.txt ```
###### 包含文件
同步文件时有些文件是必须要同步的,可使用参数`--include`,`*`为模糊匹配,必须搭配`--exclude`来使用
排除所有文件,但是会包括 TXT 文件
``` rsync -a --include="*.txt" --exclude='*' /opt/www/ /opt/data/ ```
#### 远程同步
想把文件同步到远程服务器,如果不是用`rsync`自身的协议,那就是是用`ssh`了
远程同步与本地同步最大区别,除了参数,就是多了目标路径前加上远程服务器的登录账号和IP地址
使用参数`-e`来启用`ssh`方式同步
###### 同步文件夹到远程目录
本地`/opt/www/`下的所有文件与文件夹,同步到远程服务器`/opt/data/`下,服务器IP和目标路径用`:`隔开
``` rsync -a -e ssh /opt/www/ root@192.168.1.200:/opt.data ```
###### 远程目录同步到本地文件夹
本地可以同步到远程,远程也可以同步到本地
远程服务器`/opt/data/`下的所有文件与文件夹,同步到本地`/opt/www/`下
``` rsync -a -e ssh root@192.168.1.200:/opt.data/ /opt/www ```
###### 远程服务器的SSH使用非默认端口
如果远程服务器的`SSH`不是使用的`22`端口,`-e`后面的参数要用单引号包含,如端口为`2345`
``` rsync -a -e 'ssh -p 2345' /opt/www/ root@192.168.1.200:/opt.data ```