我使用的linux rsync命令

我希望备份网站的文件,在两台服务器上相同目录下文件达到一致,包括软链接。

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD 

-z, --compress 对备份的文件在传输时进行压缩处理 

-t, --times 保持文件时间信息

-p, --perms 保持文件权限 
-o, --owner 保持文件属主信息 
-g, --group 保持文件属组信息 

rsync -a --delete  /src  /dst

这里红色大字体提醒:src写斜杠和不写斜杠是不同的,写斜杠的话,认为是把这个目录下所有文件同步到dst目录里面,注意,是目录里面。不写斜杠,才是将目录src同步到dst目录里面。

举例:

主机A目录/data/web 和主机B /data/web 要保持完全一致的话,命令如下:

rsync -a --delete  root@xxx.xxx.xxx.xxx:/data/web  /data

强烈推荐这种方法:

rsync -a --delete  root@xxx.xxx.xxx.xxx:/data/web/  /data/web/

因为写了斜线,不会因为误写影响到上级目录,而且如果目标目录不存在也会建立的。

如下写法是错误的:

rsync -a --delete  root@xxx.xxx.xxx.xxx:/data/web  /data/web/  这样会同步成/data/web/web

rsync -a --delete  root@xxx.xxx.xxx.xxx:/data/web/  /data/   这样会把/data/web目录中所有文件同步到/data目录下。

总之:src的路径写斜杠代表同步该目录中所有文件,不写则同步该目录。dst目录不是,写斜杠、不写斜杠跟linux一样的解释。

 另外说一下:发现这个命令可以用于删除某个目录中所有文件,对于该目录下有数以万计的文件来说,这个命令可以秒删!

rsync --delete-before -a /src /dst

方法:比如要删除/data/tmp中所有文件,但该目录下文件已经20万个了,如果用rm -f的话,就太慢了,而且可能参数太长,无法执行,只能用find /data/tmp --type f | xargs rm -f 的方法先删掉文件再rm -rf /data/tmp

用这个命令,那么:

mkdir /data/tmp_empty

rsync --delete-before -a /data/tmp_empty /data/tmp

即同步一个空目录给tmp目录,这样就能秒删了。