rsync 命令是增量复制还是覆盖文件?

rsync 命令是增量复制还是覆盖文件?

rsync 命令用于将文件夹数据同步到另一个文件夹。我想知道此命令是否覆盖整个文件并同步或仅复制新文件或更改的文件。如果在目标文件夹中找到类似名称的文件是否会提示?

具体来说,我正在使用它rsync -rvh /usr/local/aryan/ /usr/local/aryan,它覆盖了从本地计算机到远程计算机的所有文件。我手动将 10 个文件复制到远程位置,然后使用上面的rsync命令同步 20 个文件,包括前 10 个文件。之后rsync -rvh command,我可以看到远程位置的所有文件都有相同的时间。这意味着所有文件都被覆盖了。

答案1

rsync通常会在目标旁边创建文件的新版本,然后在完成后的最后一刻将其切换到目标名称。新版本可以使用增量(即源和目标之间的更改)或完整副本来创建。 (请参阅我的回答比 rsync 更智能的文件传输?为了更清楚地了解这种差异。)

--partial标志指示rsync如果连接因任何原因中断,则保留并使用任何部分传输的文件作为目标。 (否则,部分传输的文件将被丢弃。)此标志的优点是,当rsync中断并重试时,传输文件所花费的时间和带宽不会浪费。此标志的缺点是,中断前已传输 90% 的文件最终可能会被中断前仅传输 10% 的同一文件替换。

--inplace标志指示rsync直接就地构建目标文件。这通常在时间上效率较低,但避免了远程文件系统上同时拥有目标文件的两个完整副本。在一般情况下,不应使用此标志(实际上它与其他一些选项冲突,例如--sparse)。

答案2

呃,这实际上取决于传递给 的标志rsync,但默认情况下rsync会将整个文件从源镜像到目标,尽管您可以在一定程度上使用--update--existing--ignore-existing或 以及各种排除复杂性(--exclude--delete--delete-excluded) 来自定义发生的情况选项(--prune-empty-dirs等)。

(谢天谢地!)没有提示(密码除外),并且不支持我所知道的“相似名称”(什么用例需要这样做?)。

答案3

从手册页:

It is famous for its delta-transfer algorithm, which reduces the amount 
of data sent over the network by sending only the differences between 
the source files and the existing files in the destination.

您可以通过测试看到这一点:

$ mkdir foo 酒吧
$ echo "a" > foo/a
$ rsync -av --stats foo/ bar/
发送增量文件列表
./
A

文件数量:2(reg:1,dir:1)
创建的文件数量:1(reg:1)
已删除文件数:0
传输的常规文件数量:1
--> 文件总大小:2 字节
--> 传输文件总大小:2 字节
...等等等等等等...

这确定初始 rsync 将 2 个字节的数据从源目录发送到目标目录。

现在添加一个新文件并进行 rsync:

$ echo "b" > foo/b
发送增量文件列表
./

文件数量:3(reg:2,dir:1)
创建的文件数量:1(reg:1)
已删除文件数:0
传输的常规文件数量:1
--> 文件总大小:4 字节
--> 传输文件总大小:2 字节
...等等等等等等...

在这里,rsync 正确地看到所有文件总共 4 个字节,但只需要发送 2 个。换句话说,它不会覆盖现有文件。

相关内容