Rsync:如果校验和相同,则保持目标文件不变

时间:2018-05-14 06:34:33

标签: rsync

我们说我们有以下文件:

 ~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml 
 -rw-r--r-- 1 david david 81 14. Mai 07:58 harp_netlify/BingSiteAuth.xml
 -rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml

两个文件的内容相同:

~/Homepage $ cmp harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml; echo $?
0

因此,我希望harp_netlify/BingSiteAuth.xml不会因内容相同而被更改。但是,使用以下命令,目标端文件的时间戳会更新:

~/Homepage $ rsync -cav --delete harp_output/ harp_netlify/

结果如下:

~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml 
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml

但是,我想要这个:

~/Homepage $ ls -l harp_output/BingSiteAuth.xml harp_netlify/BingSiteAuth.xml 
-rw-r--r-- 1 david david 81 14. Mai 07:58 harp_netlify/BingSiteAuth.xml
-rw-r--r-- 1 david david 81 14. Mai 08:10 harp_output/BingSiteAuth.xml

但是,如果校验和不同,则rsync必须更新时间戳。

1 个答案:

答案 0 :(得分:1)

您传递给rsync的参数是-cav;你遇到的问题是" a"如man page中所述,它会扩展为-rlptgoD,并为您提供传递给rsync的最终-crlptgoDv参数列表。

其中棘手的部分是ptgo,它们保留了权限(p),修改时间(t)(其中)是导致当前示例中的同步更改的原因),组(g)和所有者(o)。如果我理解你的问题,你想要的是:

rsync -crlDv --delete harp_output/ harp_netlify/

在此我们保留了" c"和" v"从您当前的命令,并使用" r" (对于递归同步")," l"保留符号链接,以及" D"保留设备和特殊文件。如果您想要的是基于校验和递归同步,并且您不关心链接或特殊文件,那么" r"足够;即:

rsync -crv --delete harp_output/ harp_netlify/