Rsync 用于同步本地和远程目录

Rsync是一个基于 Linux命令行工具,用于在远程和本地服务器之间同步文件。它通过移动已更改的文件部分来最大限度地减少复制的数据量。

我们介绍如何使用Rsync远程系统同步。

准备条件

您需要两台机器来rsync在本地和远程系统之间同步文件。这些机器充当您的本地计算机和远程计算机。

您可以使用已配置的虚拟专用服务器、个人计算机或虚拟机。设置管理员用户并为每个系统配置防火墙。

您还需要在两个系统上都有 SSH 密钥。将服务器的公钥复制到其他服务器的authorized_keys文件中。

您可以在运行 Ubuntu 20.04 的计算机上使用本指南。它可以与任何已安装的基于 Linux 的操作系统配合使用rsync

Rsync语法

的语法与其他工具、 、和rsync类似。sshscpcp

使用以下命令更改到主目录:

cd ~

创建测试目录: 

mkdir dir1

再创建一个测试目录: 

mkdir dir2

然后添加一些测试文件:

touch dir1/file{1..100}

您现在有一个名为 的目录,dir1其中包含 100 个空文件。使用以下命令列出文件来确认

ls dir1
Output 

file1 file20 file27 file45 file36 file54 file63 file72 file90 file81 
file10 file19 file28 file37 file55 file46 file64 file73 file82 file91 
file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 
file11 file18 file12 file93 file48 file57 file66 file75 file84 file39
 file3 file21 file30 file49 file4 file58 file76 file67 file85 file94 
file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 
file14 file40 file32 file23 file41 file6 file69 file78 file87 file96
 file15 file24 file42 file33 file51 file60 file7 file79 file89 file97
 file16 file25 file34 file43 file52 file62 file70 file8 file88 file98
 file17 file26 file35 file44 file53 file61 file71 file80 file9 file99

还有一个名为 的空目录dir2。您现在可以将 dir1 的内容同步到dir2同一系统上。

运行 rsync 并使用以下 -r标志,这意味着递归并且对于目录同步至关重要:

rsync -r dir1/ dir2

使用-a代表“存档”的标志。这是一个推荐的标志,并且比 更常用-r

该标志递归同步并保留符号链接。它包括特殊文件和设备文件、修改时间、组、所有者和权限。

使用该标志运行相同的命令-a

rsync -a dir1/ dir2

注意:在前两个命令的语法中,第一个参数末尾有一个尾部斜杠 (/)。

该尾部斜杠显示了 的内容dir1

如果没有尾部斜杠,dir1目录将放置在dir2.

结果将创建如下所示的层次结构:

~/dir2/dir1/[files]

在执行命令之前检查您的参数rsync

-nRsync 提供了一种传递或选项的方法--dry-run。该-v标志代表详细,也需要获得正确的输出。

对于下一个命令,您可以组合anv标志:

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

源是上面的第一个参数,目的地是第二个。

使用其他 Rsync 选项

Rsync 提供了更改实用程序默认行为的选项。

例如,您可以通过使用选项添加压缩来减少网络传输-z。当传输尚未压缩的文件时,它非常有用。

rsync -az source destination

 

旗帜-P也很有帮助。它结合了标志--progress--partial。第一个标志提供了传输进度条。第二个标志恢复中断的传输:

rsync -azP source destination
Output
sending incremental file list
created directory destination
source/
source/file1
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=99/101)
sourcefile10
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=98/101)
source/file100
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=97/101)
source/file11
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=96/101)
source/file12
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=95/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

 

您可以更新某些文件的修改时间:

touch dir1/file{1..10}

 

如果再次运行 rsync -azP,输出将显示如何Rsync智能地仅重新复制已修改的文件:

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。在此之前,使用-n,--dry-run选项执行测试:

rsync -an --delete source destination

 

您可以在同步时排除目录内的某些文件或目录。它还允许您在选项后面的逗号分隔列表中指定它们--exclude=:

rsync -a --exclude=pattern_to_exclude source destination

 

通过覆盖与不同模式匹配的文件的排除来排除指定模式。您可以使用--include= option:

rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

--backup选项用于存储重要文件的备份。它与--backup-dir选项一起使用。它指定存储备份文件的目录

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

概括

Rsync 或远程同步可让您将文件和目录传输到本地和远程目的地。

Rsync用于镜像、备份或将数据迁移到其他服务器。它是一种高效的工具,仅复制源中的更改并提供自定义选项

THE END