如何使用Rsync同步本地和VPS远程目录

Rsync是用于智能同步本地和远程目录一个简单的工具。在这篇文章中,我们将探讨这个工具的基本用法将文件复制从目录到目录以及从系统到系统中。

介绍


Rsync ,它代表“远程同步”,是远程和本地文件同步工具。它使用一种算法,通过仅移动已更改的文件部分来最小化复制的数据量。 在本指南中,我们将介绍此强大实用程序的基本用法。我们将在示例中使用Ubuntu 12.04 VPS,但是您可以使用任何现代Linux发行版。

什么是Rsync?


Rsync是一个非常灵活的网络启用的同步工具。它可以指开发利用这种工具的网络协议。 当我们在本指南中引用rsync时,我们主要指的是实用程序,而不是协议。 由于其在Linux和类Unix系统上的普遍性以及作为系统脚本工具的普及性,它默认包含在大多数Linux发行版中。

基本语法


Rsync基本语法非常简单,操作方式类似于ssh,scp和cp。 我们将使用以下命令创建两个测试目录和一些测试文件:
cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}
我们现在有一个名为dir1在它100空文件。
ls dir1

file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
我们也有称为空目录dir2 。 要同步的内容dir1dir2在同一系统上,键入:
rsync -r dir1/ dir2
-r选项意味着递归的,这是必要的目录同步。 我们还可以使用-a标志来代替:
rsync -a dir1/ dir2
-a选项组合标志。 它代表“归档”并递归同步,并保留符号链接,特殊和设备文件,修改时间,组,所有者和权限。 这是比较常用的比-r,通常要使用什么。

重要注意事项


您可能已经注意到,在上述命令的第一个参数的末尾有一个尾部斜杠(/):
rsync -a dir1/ dir2
这是必要的,意思是“的内容dir1 ”。 另一种选择,没有最后的斜线,将使dir1 ,包括目录内dir2 。这将创建一个层次结构,如下所示:
~/dir2/dir1/[files]
在执行rsync命令之前,请始终仔细检查参数。 Rsync为通过将-n--dry-运行选项这样的方法。 -v标志(用于详细)也有必要得到适当的输出:
rsync -anv dir1/ dir2

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
将此输出与我们删除尾部斜杠时获得的输出进行比较:
rsync -anv dir1 dir2

sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
你可以看到这里目录本身被转移。

如何使用Rsync与远程系统同步


如果您对远程计算机具有SSH访问权限,并且双方都安装了rsync,则与远程系统同步是微不足道的。如果你需要设置SSH密钥 ,请点击此处。 一旦你已经SSH访问两台机器之间的验证,你可以同步dir1通过使用此语法从早期到远程计算机的文件夹(注意,我们希望在这种情况下传输实际的目录,因此我们省略了结尾的斜线):
rsync -a ~/dir1 username@remote_host:destination_directory
这被称为“推送”操作,因为它将目录从本地系统推送到远程系统。 相反的操作是“拉”。它用于将远程目录同步到本地系统。如果dir1是远程系统,而不是我们的本地系统上,语法是:
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
像“cp”和类似的工具,源始终是第一个参数,目标始终是第二个。

Rsync有用选项


Rsync提供了许多选项来更改实用程序的默认行为。我们已经讨论了一些更加必要的标志。 如果你正在传输那些尚未被压缩,如文本文件文件,您可以通过使用-z选项将压缩减少网络传输:
rsync -az source destination
-P标志非常有帮助。 它结合了标志--progress--partial。第一个给你一个进度条的传输,第二个允许你恢复中断传输:
rsync -azP source destination
sending incremental file list
./
file1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
如果我们再次运行命令,我们将得到一个较短的输出,因为没有进行任何更改。 这说明rsync能够使用修改时间来确定是否已进行更改。
rsync -azP source destination
sending incremental file list

sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
我们可以更新某些文件的修改时间,并看到rsync智能地仅重新复制已更改的文件:
touch dir1/file{1..10}
rsync -azP source destination
sending incremental file list
file1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file2
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)
file3
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101)
. . .
为了保持两个目录真正同步,如果从源目录中删除文件,则必须从目标目录中删除文件。默认情况下,rsync不会从目标目录中删除任何内容。 我们可以改变与--delete选项此行为。 使用此选项之前,使用--dry-run选项,并做检测,以防止数据丢失:
rsync -a --delete source destination
如果您希望排除位于您要同步的目录里面某些文件或目录,您可以通过下面的--exclude =选项以逗号分隔的列表中指定他们这样做的:
rsync -a --exclude=pattern_to_exclude source destination
如果我们指定了一个模式,排除,我们可以覆盖排除通过使用--include=选择匹配不同模式的文件。
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

结论


Rsync可以简化通过网络连接的文件传输,并增加了本地目录同步。 Rsync灵活性使其成为许多不同文件级操作的一个很好的选择。 掌握rsync允许您设计复杂的备份操作,并获得对传输和如何进行细粒度的控制。
作者:Justin Ellingwood