Linux Rsync与--从本地到本地的校验和?

Linux Rsync与--从本地到本地的校验和?,linux,bash,unix,rsync,Linux,Bash,Unix,Rsync,我先试着定位一下这个问题。我们有一个项目是建立在一个大的文件树。这个版本有几百MB,包含很多(很小的)文件,其中只有一小部分在不同版本之间发生变化。我们希望保留这些构建的一些历史记录,为了有效地做到这一点,我们希望硬链接在构建之间不会更改的文件。为此,我们使用rsync(作为cp更强大的兄弟),从本地源到本地目标,使用选项--link dest进行硬链接 这对于增量构建非常有效:大多数文件都不会被触碰,并且rsync正确执行硬链接技巧。对于完整的重新编译构建(我们必须这样做,原因与此无关),事情

我先试着定位一下这个问题。我们有一个项目是建立在一个大的文件树。这个版本有几百MB,包含很多(很小的)文件,其中只有一小部分在不同版本之间发生变化。我们希望保留这些构建的一些历史记录,为了有效地做到这一点,我们希望硬链接在构建之间不会更改的文件。为此,我们使用
rsync
(作为
cp
更强大的兄弟),从本地源到本地目标,使用选项
--link dest
进行硬链接

这对于增量构建非常有效:大多数文件都不会被触碰,并且
rsync
正确执行硬链接技巧。对于完整的重新编译构建(我们必须这样做,原因与此无关),事情似乎没有按预期工作。由于重新编译,所有文件都会获得一个新的时间戳,但就内容而言,大多数文件仍然与以前的构建相同。但是,即使我们将
rsync
--checksum
选项一起使用(因此
rsync
“syncs”/hardlinks基于内容,而不是文件大小+时间戳),也不会再进行硬链接

插图 我试图用这个简单(bash)脚本来隔离/说明问题:

第一个结果与预期的一样:所有三个副本都是硬链接的(相同的inode)

最终结果与预期不符:

30157018 -rw-r--r--  2 stefaan  staff  12 May 10 01:28 build1/helloworld.txt
30157018 -rw-r--r--  2 stefaan  staff  12 May 10 01:28 build2/helloworld.txt
30157026 -rw-r--r--  1 stefaan  staff  12 May 10 01:28 build3/helloworld.txt
30157024 -rw-r--r--  1 stefaan  staff  12 May 10 01:28 src/helloworld.txt
第三个副本
build3/helloworld.txt
build2
中的副本没有硬链接,即使内容相同,因此校验和检查应该会看到这一点

问题:
有人知道这里出了什么问题吗?我的期望错了吗?或者rsync在从本地到本地同步时是否忽略了
--checksum
选项,例如,因为它知道查看inode编号比花时间在校验和上更聪明?

问题在于使用“-a”标志会强制保留修改时间(隐式地,'-t')

如果改用'-rlpgo'(或在'-a'后面加'--no times'),修改时间将不再考虑保存,因此inode将被共享。您仍然需要指定'--size only'或'--checksum'(后者显然更安全),这样它就不会基于文件时间进行比较


文档没有明确区分哪些标志用于触发更新,哪些标志用于控制属性的保存。。。其中又有多少与编程有关?@IgnacioVazquez Abrams OP的构建系统有问题,这在你看来不是问题吗?@IgnacioVazquez Abrams你会建议什么论坛?正如blahdiblah所指出的,在我们正在“编程”的构建和发布工作流中,我们使用rsync作为“库”。@IgnacioVazquez Abrams,您应该阅读@tuxuday:您在列表中看到“第三方软件”了吗?我的rsync有
--忽略时间
,而不是
--没有时间
。RSync2.6.9,OSX10.8.4附带的版本。这些版本不一样--无时间关闭--时间(即,表示“复制时不保留文件系统时间”)--忽略时间意味着“不要考虑何时选择要复制的文件”。这两个版本都由OS X版本支持,请参阅文档“无选项”。
30157018 -rw-r--r--  3 stefaan  staff  12 May 10 01:28 build1/helloworld.txt
30157018 -rw-r--r--  3 stefaan  staff  12 May 10 01:28 build2/helloworld.txt
30157018 -rw-r--r--  3 stefaan  staff  12 May 10 01:28 src/helloworld.txt
30157018 -rw-r--r--  2 stefaan  staff  12 May 10 01:28 build1/helloworld.txt
30157018 -rw-r--r--  2 stefaan  staff  12 May 10 01:28 build2/helloworld.txt
30157026 -rw-r--r--  1 stefaan  staff  12 May 10 01:28 build3/helloworld.txt
30157024 -rw-r--r--  1 stefaan  staff  12 May 10 01:28 src/helloworld.txt