我使用的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 [email protected]:/data/web /data
强烈推荐这种方法:
rsync -a --delete [email protected]:/data/web/ /data/web/
因为写了斜线,不会因为误写影响到上级目录,而且如果目标目录不存在也会建立的。
如下写法是错误的:
rsync -a --delete [email protected]:/data/web /data/web/ 这样会同步成/data/web/web
rsync -a --delete [email protected]:/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目录,这样就能秒删了。