Rsync 的原意是“remote sync”,代表“远程同步”,是一种远程和本地文件同步工具。它可以仅移动已更改的文件部分来最大限度地提升同步效率。
通过本文,我们将详细介绍 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/