介绍
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
。 要同步的内容
dir1
到
dir2
在同一系统上,键入:
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访问两台机器之间的验证,你可以同步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