1. 什么是 rsync
?
rsync
是一个提供快速增量文件传输的开源实用程序。
rsync
可以在本地与远程机器之间同步文件或目录,并且只传输已更改或新增的部分,从而大幅度减少数据传输的时间和带宽消耗。
本文仅介绍 rsync
的常用方法,个人认为已足够覆盖工作中的各类场景,更多高级功能读者可自行查阅 rsync 官方文档,
2. rsync
的基本命令
官方文档中将 rsync 命令的使用分了三类:
1. 本地使用:
1 | rsync [OPTION...] SRC... [DEST] |
2. 通过远程 shell 访问:
1 | Pull: |
3. 通过 rsync daemon 访问(后面会具体说什么是 rsync daemon):
1 | Pull: |
注:
- 仅指定源参数
SRC
而不指定目的参数DEST
的用法将列出源文件而不是复制。 ...
表示可以有多个值。OPTION...
表示可以有多个参数,这个是比较好理解的。SRC...
表示可以有多个源,rsync 是支持多个源路径的,即把多个源都同步到目的位置。当一行中指定了多个路径时,最后一个为目的路径,前面的全部为源路径(也就是说,是不可以同时指定多个源路径又不指定目的路径的,即不能同时列出多个源路径的内容,因为这样的话期望中的最后一个源路径会被识别为目的路径)。
下面分别说这三类使用方法,且本文的示例中仅包含唯一源的用法(多个源的场景较少,而且需要额外的注意力来保证程序达成预期的效果)。
3. 常用参数说明
下面列出了几个 rsync 的几个最常用的参数,这些参数已经足够日常的工作使用了。如果你有更高级的需求,请自行查阅 rsync 官方文档。
其中 -a
参数几乎是在各个场景都会需要的,其他参数就可以根据场景需求来选择。
-a
,--archive
:”归档” 参数,用于实现文件的归档和同步。设定一个-a
,等于同时设定了-rlptgoD
共 7 个参数。使用-a
参数可以方便地实现归档和同步目录及其内容。它会尽力保留文件的各种属性和元数据,使得目标位置的文件尽可能地与源位置的文件相同。-r
,--recursive
:递归地复制文件和目录,包括子目录。-l
,--links
:保留符号链接。这会使得目标位置的链接与源位置的链接指向相同的目标。-p
,--perms
:保留文件的权限。这会确保目标位置的文件与源位置的文件具有相同的访问权限。-t
,--times
:保留文件的修改时间。目标位置的文件将具有与源位置的文件相同的最后修改时间。-g
,--group
:保留文件的属组信息。这会使得目标位置的文件的属组与源位置的文件相同。-o
,--owner
:保留文件的属主信息。这意味着目标位置的文件的所有者与源位置的文件相同。-D
:等价于同时设定参数--devices
和--specials
。即保留设备和特殊文件,如块设备和字符设备,以及 FIFO 和套接字。--devices
:保留设备文件。--specials
:保留特殊文件。
-v
,--verbose
:打印冗余信息。不设定此参数时 rsync 只会打印出传输出现问题的文件或目录的信息,设定此参数后 rsync 会输出所有传输的文件和目录的信息。-c
,--checksum
:使用校验和判定文件是否修改,不设定此参数时(即默认时)rsync 通过修改时间和大小判断文件是否修改。-z, --compress
:压缩传输。在传输时使用压缩算法,减少网络带宽的使用。-P
:断点续传。在传输中保持文件的部分传输状态,如果传输被中断,可快速恢复传输。等价于同时设定参数--partial
和--progress
。--partial
:保留部分传输的文件--progress
:显示传输进度。在传输过程中显示每个文件复制的进度。
--delete
:删除目标中不存在的文件。确保目标目录与源目录内容保持一致。--exclude
:排除文件或目录。指定要排除的文件或目录的匹配模式(即支持正则),不进行复制。