rsync 文件重复忽略未按预期工作

rsync 文件重复忽略未按预期工作

我对 rsync 的工作方式感到困惑。以下是我所做的和预期的。

我创建了两个名为“sbck”和“dbck”的文件夹。

场景 1:

我创建了一个名为的文件a.txt,并使用 创建了它的副本cp -rp a.txt aa.txt。我将两个文件都放在sbck文件夹中。接下来我执行了rsync -rvch sbck/ dbck/。这将两个文件都移入了 dbck。

问题:既然 a.txt 和 aa.txt 相同,为什么 rsync 允许这种复制?难道不应该只允许其中之一吗?

场景 2:

我创建了一个名为的文件a.txt,并使用 创建了它的副本cp -rp a.txt aa.txt。我将两个文件都放在sbck文件夹中。接下来,我执行了cp -rp sbck/a.txt dbck/。后来,我执行了rsync -rvch sbck/ dbck/。这将 移入aa.txt了 dbck。

问题:由于 a.txt 和 aa.txt 相同,并且我已将 a.txt 移至 dbck。为什么 rsync 允许 aa.txt 复制到 dbck? -c 在这种情况下究竟如何帮助我?

答案1

我认为你误解了它-c的作用。rsync不进行文件重复数据删除,无论有没有这个-c选项。它所做的只是-c改变如何rsync决定文件是否需要在目标上更新。

假设sbck/a.txtdbck/a.txt,然后你运行rsync -rvh sbck/ dbck/(注意:没有-c选项)。它的rsync作用是比较这两个文件的大小和修改时间,如果它们匹配,它会假设文件的内容也匹配,并且不会费心复制sbck/a.txtdbck/a.txt

现在,假设您运行rsync -rvch sbck/ dbck/(使用-c这个时间)。这次,rsync将计算和的校验sbck/a.txtdbck/a.txt,并使用这些(而不是它们的大小和 mod 时间)来确定文件是否相同,因此sbck/a.txt不需要将的新内容复制到。它不会将的校验和与源树或目标树中任何其他文件的dbck/a.txt校验和进行比较。sbck/a.txt

相关内容