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

介绍

Rsync代表“远程同步”,是一种远程和本地文件同步工具。它使用一种算法,通过仅移动已更改的文件部分来最大限度地减少复制的数据量。

在本指南中,我们将介绍这个强大实用程序的基本用法。

什么是 Rsync?

Rsync 是一个非常灵活的网络同步工具。由于它在 Linux 和类 Unix 系统上无处不在,并且它作为系统脚本的工具很受欢迎,因此默认情况下它包含在大多数 Linux 发行版中。

基本语法

的基本语法rsync非常简单,其操作方式类似于 ssh、scp 和 cp。

我们将使用以下命令创建两个测试目录和一些测试文件:

  • cd ~
  • mkdir dir1
  • mkdir dir2
  • touch dir1/file{1..100}

我们现在有一个名为的目录,dir1其中包含 100 个空文件。

  • ls dir1
Output
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.

在同一系统上同步dir1to的内容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-run选项来执行此操作的方法-v(用于详细)标志,还必须得到适当的输出:

  • rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

将此输出与删除尾部斜杠时得到的输出进行比较:

  • rsync -anv dir1 dir2
Output
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
Output
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
Output
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
Output
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 的--backup选项可用于存储重要文件的备份。它与--backup-dir选项结合使用,该选项指定应存储备份文件的目录。

  • rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

结论

Rsync 可以简化网络连接上的文件传输,并增加本地目录同步的稳健性。rsync 的灵活性使其成为许多不同文件级操作的不错选择。

掌握 rsync 可以让您设计复杂的备份操作,并获得对传输内容和方式的细粒度控制。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁