首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >rsync:--size-only和--ignore-time之间的差异

rsync:--size-only和--ignore-time之间的差异
EN

Stack Overflow用户
提问于 2012-12-08 23:27:19
回答 4查看 118.3K关注 0票数 132

我在试着理解两种选择之间的区别

代码语言:javascript
复制
rsync --size-only

代码语言:javascript
复制
rsync --ignore-times

据我所知,默认情况下,rsync会比较时间戳和文件大小,以决定是否应该同步文件。上面的选项允许用户影响此行为。

这两个选项似乎至少在口头上产生了相同的结果:仅按大小比较的

我是不是漏掉了什么微妙的东西?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-09 00:18:53

rsync有几种比较文件的方法--权威的来源是rsync算法描述:https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf。rsync上的wikipedia article也非常好。

对于本地文件,rsync比较元数据,如果它看起来不需要复制文件,因为源和目标之间的大小和时间戳匹配,则不会进一步查看。如果它们不匹配,cp就是文件。但是,如果元数据确实匹配,但文件实际上并不相同,该怎么办?那么rsync可能没有做您想要的事情。

大小相同的文件可能仍已更改。一个简单的示例是一个文本文件,您可以在其中更正一个拼写错误--比如将"teh“更改为"the”。文件大小相同,但更正后的文件将具有较新的时间戳。--size-only说“不要看时间;如果大小匹配,就假定文件匹配”,这在这种情况下是错误的选择。

另一方面,假设你昨天不小心做了一个大的cp -r A B,但是你忘了保存时间戳,现在你想用反向rsync B A来做这个操作。您cp‘s的所有文件都有昨天的时间戳,即使它们在昨天并没有真正被修改,rsync在默认情况下会复制所有这些文件,并将时间戳更新到昨天。在这种情况下,--size-only可能是你的朋友(在上面的例子中取模)。

--ignore-times说,无论文件的修改时间是否相同,都要比较这些文件。考虑一下上面的拼写错误示例,但是您不仅更正了拼写错误,而且还使用了touch来使更正后的文件具有与原始文件相同的修改时间--可以这么说,您在这方面是偷偷摸摸的。即使文件的大小和时间匹配,--ignore-times也会对文件进行比较。

票数 124
EN

Stack Overflow用户

发布于 2017-06-04 19:52:39

简而言之,--ignore-times所做的比它的名字所暗示的更多。它忽略了时间和大小。相比之下,--size-only完全做到了它说的话。

长篇大论的答案是,rsync有三种方法来确定文件是否过时:

对源的大小和源的时间戳进行比较,并对源和目标的静态校验和进行destination.

  • Compare。

这些检查在传输数据之前执行。值得注意的是,这意味着静态校验和不同于流校验和-后者是在传输数据时计算的。

默认情况下,rsync仅使用1和2。单个stat可以同时获取1和2,而3需要读取整个文件(这独立于读取文件进行传输)。假设只指定了一个修饰符,这意味着:

  • 通过使用--size-only,仅执行1-忽略时间戳和校验和。除非文件两端的大小相同,否则文件将被复制。
  • 通过使用--ignore-times,1、2或3都不执行。始终复制文件。通过使用--checksum执行
  • ,除1之外还使用%3,但不执行%2。除非大小和校验和匹配,否则将复制文件。仅当大小匹配时才计算校验和。
票数 91
EN

Stack Overflow用户

发布于 2014-10-16 23:25:43

您错过了rsync还可以通过校验和比较文件。

--size-only意味着rsync将跳过大小匹配的文件,即使时间戳不同。这意味着它将同步比默认行为更少的文件。它将丢失任何更改不会影响整个文件大小的文件。如果您需要在不更改文件的情况下更改文件的日期,并且不希望rsync花费大量时间对这些文件进行校验和以发现它们没有更改,则可以使用此选项。

--ignore-times意味着rsync将校验每个文件,即使时间戳和文件大小匹配也是如此。这意味着它将同步比默认行为更多的文件。它将包括对文件的更改,即使文件大小相同,并且修改日期/时间已重置为原始值。校验和每个文件意味着它必须完全从磁盘读取,这可能会很慢。一些构建管道会将时间戳重置为特定的日期(如1970-01-01),以确保最终的构建文件是逐位可复制的,例如,当打包成保存时间戳的tar文件时。

票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13778889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档