我对 rsync 的工作感到困惑。这是我所做的和期望的。
我创建了两个名为“sbck”和“dbck”的文件夹。
场景一:
我创建了一个名为的文件a.txt
并使用cp -rp a.txt aa.txt
. 我把这两个文件放在sbck
文件夹中。接下来我做了rsync -rvch sbck/ dbck/
。这将这两个文件都移到了 dbck 中。
问题:既然 a.txt 和 aa.txt 都是一样的,为什么 rsync 允许这个副本?它不应该只是两者之一吗?
场景二:
我创建了一个名为的文件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 在这种情况下如何帮助我?
我认为你误解了什么
-c
。rsync
不执行文件重复数据删除,有或没有该-c
选项。-c
所做的只是改变rsync
决定文件是否需要在目标上更新的方式。假设
sbck/a.txt
anddbck/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
,并使用这些(而不是它们的大小和修改时间)来确定文件是否相同,因此sbck/a.txt
不需要将 的新内容复制到dbck/a.txt
. 它不会将 的校验和sbck/a.txt
与源树或目标树中的任何其他文件的校验和进行比较。