rsync带上delete的参数后,当源目录中的文件删除,同步后目标目录中的文件也会被删除,如果源目录写法不当,可能无法达到同步删除目标目录的文件。例如:
/usr/bin/rsync -vzrtopg --progress --delete \
/home/yangyz/tmp/src/* /home/yangyz/tmp/dest/
当删除src下的文件或文件夹时,同步后dest中还是存在,如果是删除src的子目录下的,同步后dest中会被删除,而下面命令就不一样,不管删除的是哪个文件夹下的内容,同步dest都会做相同的删除
/usr/bin/rsync -vzrtopg --progress --delete \
/home/yangyz/tmp/src/ /home/yangyz/tmp/dest/
上述两条命令的不同之处就是在src后面是否带*号,另外如果src目录后不带斜杠,那么是将src目录复制到dest中,包含了src目录,否则是把src目录下的文件同步到dest中,不包含src目录。
出现rsync: failed to set times on “xxxx”: Operation not permitted的原因大致是对文件夹(或文件)xxxx没有操作权限。如果执行同步的用户是root,是不会有这样的问题,但是rsync也可以不使用root用户来进行同步,不使用root用户的情况下,即使使用了-o,-g,同步到目的文件夹的文件用户和组都变成了同步使用的用户,但是用-p后文件权限可以保留。当目的文件夹(或文件)xxxx事后做过修改使owner不是rsync使用的用户,即使xxxx的权限是777,也会出现上述错误。
rsync可以让两个目录的内容一致,它同步只会同步有更新过的文件,减少传输量。可以是本机上的两个目录,也可以是本机的目录同步到服务器上,还可以是把服务器上的目录同步到本机上。
基本命令是 rsync 命令的参数 源目录 目的目录
rsync可以基于ssh协议来做,这样就省去了很多配置rsync server的麻烦,如果两个机器已经实现ssh无密码登陆,那么rsync就会提示输入密码,还有一种是通过密钥文件来实现免密码,例如下面
1、rsync -vzrtopg –progress -e ssh –delete 用户名@服务器IP:/var/www/dirA/ /var/bak/
2、rsync -vzrtopg –progress -e “ssh -i /path/pwd.pem” –delete 用户名@服务器IP:/var/www/dirA/ /var/bak/
就是把服务器上的dirA目录同步到本地的/var/bak目录下,其中方法1是用户已经做了ssh免密码登陆,方法2是通过密钥(存放在/path 下的pwd.pem文件)来同步