简介
rsync 即 remote sync,一个远程与本地文件同步工具。rsync 使用的算法能够最小化所需复制的数据,因为它只移动那些修改了的文件。
rsync 是一个非常灵活的同步工具,它也是一种使用该工具的网络协议名称。本文中所说的 rsync 都是指同步工具,而非网络协议。由于它在类 Unix 系统中广为流行,它也是大多数 Linux 发行版的默认自带工具。
基本语法
rsync 的基本语法非常简单,类似于 ssh, scp 和 cp 命令的语法。
例如我们创建两个目录和一些文件:
cd ~
mkdir dir1 dir2
touch dir1/file{1..100}
现在 dir1 目录中有 100 个空文件,一个空目录 dir2,现在同步 dir1 目录中的内容到 dir2:
rsync -r dir1/ dir2
-r 选项表示递归,这在同步目录时非常重要。对以上操作,我们也可以用 -a 选项来实现:
rsync -a dir1/ dir2
-a 选项表示 archive,递归同步文件,保留符号链接,特殊或设备文件,修改时间,用户组,所有人和权限。一般情况下使用 -r 就可以了。
注意
你也许已经留意到以上示例第一个参数后面的 /
符号,它表示 “dir1 的内容”。
如果没有 /
符号,例如 rsync -r dir1 dir2
,则表示需要同步的对象包括目录 dir1
,于是在 dir2
目录结构同步成了 dir2/dir1/[100 files]
,因此在同步之前一定要小心检查。
要检查 rsync 即将执行的操作,可以使用 -n
或 --dry-run
选项,该选项会打印出同步结果,但实际上并不做真正的同步操作,一般会增加一个 -v
选项来查看输出结果,例如:
rsync -anv dir1/ dir2
同步远程文件
rsync 同步远程文件语法和 scp 命令相似,只要你拥有远程 SSH 访问权限,同时远程和本地都安装了 rsync 命令。
推送文件至远程
rsync -a dir1 username@remote_host:destination_directory
拉拽文件至本地
rsync -a username@remote_host:~/path/to/dir1 local_destination_path
无论是推送还是拉拽,第一个参数总是源文件,第二参数才是目标文件。
常用选项
如果你要同步一些未压缩的文件,你可以使用 -z
选项来压缩文件并传输以减少网络传输量。
rsync -az src dest
另外一个非常有用的选项是 -P
,该选项结合了 --progress
和 --partial
两个选项的功能,--progress
表示显示同步进度条,--partial
表示断点续传。
rsync -azP src dest
要两个目录绝对同步,那就必须在目标目录中删除源目录中已删除的文件。在默认情况下,rsync 不从目标目录中删除任何东西,但我们可以使用 --delete
选项来修改这种默认行为:
rsync -a --delete src dest
如果你想要排除某些文件进行同步,你可以使用 --exclude=pattern
选项,多个文件之间使用 ,
分隔:
rsync -a --exclude=pattern1,pattern2 src dest
使用不同的 SSH 端口:
rsync -azP -e "ssh -p 2422" src dest