Rsync 是一个文件和目录同步工具,它通过计算发送端和接收端的文件各部分校验和,可以只同步文件的改动部分。
Rsync 的基本用法如下:
rsync [OPTION] SRC [SRC] [USER@]HOST:DEST
rsync [OPTION] [USER@]HOST:SRC [DEST]
其中 SRC 为源路径,而 DEST 为目标路径,USER 和 HOST 分别为用户名和密码。前一种用法将本地目录文件上传到服务器目录,后一种用法从服务器目录下载文件到本地目录。例如:
rsync -avz --delete /root/foo/ user@example.com:/root/bar/
rsync -avz user@example.com:/root/bar/ /root/foo/
上面例子中我们分别利用 rsync 同步本地的 foo 目录和服务器的 bar 目录,其中的 -avz 和 --delete 是一些参数。常见的参数及其意义如下:
-a 或 --archive | 使用存档模式(遍历子目录,同步软链接和设备文件,保持文件的时间,权限,属主和属组信息),等同于 -rlDtpgo |
-e 或 --rsh=COMMAND | 指定传输方式,例如 -e "ssh -p 2222" |
-v 或 --verbose | 输出详细信息 |
-z 或 --compress | 传输时进行压缩处理 |
--delete | 删除源目录中不存在的文件 |
因此如果我们需要通过 ssh 来同步,常用这样的命令:
rsync -avze ssh --delete /root/foo/ user@example.com:/root/bar/
rsync -avze ssh user@example.com:/root/bar/ /root/foo/
Rsync 命令的源路径参数中,最后面是否有斜杠是不同的。前面例子的第一个命令中, /root/foo/ 的最后包含斜杠,因此 Rsync 会将 foo 目录中的子目录和文件都同步到 bar 目录中。如果将 /root/foo/ 改为 /root/foo,则 Rsync 会将 foo 目录本身同步到 bar 目录中去。目标路径最后是否有斜杠则没有区别。
在 Windows 中我们可以用 cwRsync。注意在 Windows 和 Linux 之间同步,可能会有编码不同造成乱码的问题。
参考资料:
[1] rsync - Wikipedia, the free encyclopedia(中文)
[2] html version of the rsync man page
[3] Rsync explanation and recommendations
[4] rsync命令用法 - maucat的个人页面