如何使用 Rsync 同步本地和远程目录 (rsync同步命令详解)

Rsync 的原意是“remote sync”,代表“远程同步”,是一种远程和本地文件同步工具。它可以仅移动已更改的文件部分来最大限度地提升同步效率。

如何使用 Rsync 同步本地和远程目录 (rsync同步命令详解)
如何使用 Rsync 同步本地和远程目录 (rsync同步命令详解)

通过本文,我们将详细介绍 Rsync 同步命令。

什么是 Rsync?

Rsync 默认被安装在大多数 Linux 发行版中 Linux 和类 Unix 系统上,是一款非常受欢迎的同步工具。

基本语法

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 的目录。

我们将 dir1 的内容同步到 dir2

rsync -r dir1/ dir2

参数 -r 表示递归,这是目录同步时所必需的。

我们也可以使用 -a 参数代替:

rsync -a dir1/ dir2

这里的 -a 是一个组合选项。它代表“归档”并递归同步,保留符号链接、特殊和设备文件、修改时间、组、所有者和权限。

重要说明

大家可能已经注意到,上述命令第一个目录末尾有一个斜杠 ( /):

rsync -a dir1/ dir2

斜杠 ( /)表示将 dir1 目录的内容同步到 dir2 中。如果没有斜杠,就会将 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

上面是将目录从本地系统推送到远程系统,相反的操作是将远程目录同步到本地。语法如下所示:

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选项。 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 -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)
. . .

要让让两个目录实时同步,如果从源目录中删除文件,则从目标目录中也删除该文件。我们可以使用 --delete 选项。在使用此选项之前,请使用 --dry-run 选项进行测试以防止数据丢失:

rsync -a --delete source destination

如果不希望同步目录中的某些文件或目录,可以通过适用 --exclude= 选项来实现:

rsync -a --exclude=pattern_to_exclude source destination

最后,rsync 的--backup 选项可用于备份重要文件。它与 --backup-dir 选项结合使用,该选项用于指定储备份文件的目录。

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

原创文章,作者:牛奇网,如若转载,请注明出处:https://www.niuqi360.com/webmaster/use-rsync-sync-local-and-remote-directories/

发表评论

登录后才能评论