我对 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.txt
和dbck/a.txt
,然后你运行rsync -rvh sbck/ dbck/
(注意:没有-c
选项)。它的rsync
作用是比较这两个文件的大小和修改时间,如果它们匹配,它会假设文件的内容也匹配,并且不会费心复制sbck/a.txt
到dbck/a.txt
。
现在,假设您运行rsync -rvch sbck/ dbck/
(使用-c
这个时间)。这次,rsync
将计算和的校验sbck/a.txt
和dbck/a.txt
,并使用这些(而不是它们的大小和 mod 时间)来确定文件是否相同,因此sbck/a.txt
不需要将的新内容复制到。它不会将的校验和与源树或目标树中任何其他文件的dbck/a.txt
校验和进行比较。sbck/a.txt