即使校验和相同,Rsync 仍然复制文件

即使校验和相同,Rsync 仍然复制文件

我想使用 rsync 比较两个目录及其文件内容并将其传输到新的空目录。所以我创建了一个小的 POC:

OLD/
...main.js

NEW/
...main.js

CHANGES/

NEW 和 OLD 中的 main.js 文件是相同的,并且具有相同的校验和。但是当我使用时:

rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/

main.js 文件仍然被复制到 CHANGES 文件夹中。我如何确保它不会这样做?我只想复制具有不同校验和的文件。

答案1

--compare-dest=DIR

[…]

如果DIR是相对路径,则相对于目标目录。 […]

(来源:man 1 rsync

在你的指挥下

rsync -rvcm --compare-dest=OLD/ NEW/ CHANGES/

OLD/是相对路径。目标目录是CHANGES/. OLD/“相对于目标目录”意味着它实际上是CHANGES/OLD/相对于当前工作目录的。您的设置中很可能不存在该目录。即使它存在,它也不是您所指的目录。

您的意思是OLD/在当前工作目录中,可以将其称为CHANGES/../OLD/.相对于 的部分CHANGES/../OLD/,因此:

rsync -rvcm --compare-dest=../OLD/ NEW/ CHANGES/

请注意,如果CHANGES是指向目录的符号链接,则CHANGES/../不一定./(比较ls ..当我位于符号链接目录中时,为什么会显示真正的父内容?)。在这种情况下CHANGES/../OLD/并不意味着OLD/--compare-dest=…根据以下内容构建论证身体的目录结构。

答案2

一般来说,最好包含时间戳并停止强制校验和

rsync -rtvm --compare-dest=OLD/ NEW/ CHANGES/

如果您要在 Linux 本机文件系统之间进行复制,您可能需要-a使用-rt.

由于您使用的是本地副本(NEW/并且CHANGES/似乎位于同一系统上),因此使用校验和进行验证是没有意义的 - 无论如何,仅复制文件的速度都会大致相同。

相关内容