rsync:它可以传输文件而忽略大小(仅比较时间戳和名称)吗?

rsync:它可以传输文件而忽略大小(仅比较时间戳和名称)吗?

rsync 是否可以仅根据修改日期和文件名进行比较/复制,而忽略文件大小?

背景:我正在尝试使用 rsync 实现两阶段备份。第一阶段是在现场,我有一个 bash rsync 脚本,用于将文件从源路径复制到现场存储,并且每小时运行一次。第二阶段在晚上运行,并使用 rsync 将所有新内容/修改内容从现场存储传输到异地数据中心。问题是,现场存储箱已经满了。减少备份数据或增加存储容量都不是选项。

我编写了一个清除脚本,每天晚上从现场存储箱中删除一年或更久以前的文件,并用空的 touch 文件替换它们,保留原始文件的时间戳——这是为了防止 rsync 在删除目标文件后从源复制回同一个文件。但我不知道如何告诉 rsync 忽略文件大小;我需要它仅根据修改日期和文件名来忽略比较/复制。

我查看了手册页并进行了搜索,但看起来这是不可能的。这是正确的吗?有什么解决方法吗?

答案1

rsync 似乎不能忽略文件大小。

如果实际文件数据无关紧要,则可能的解决方法是使稀疏目标文件的大小与源文件相同。示例:

dd if=/dev/urandom bs=1M count=4 of=a
rsync -a a b
truncate -s 0 b && truncate -r a b && touch -r a b

b现在为空并且不占用任何空间(如果文件系统支持稀疏文件),但仍然具有与 相同的大小a

rsync -a a b
du -h a b
# 4.0M    a
# 0       b

从输出可以看出dub并未更新,因为它仍然没有占用任何空间。

答案2

您可以使用--update开关“跳过接收器上较新的文件”,但是在接触占位符文件时您无法保留时间戳(如果手册页在说“较新”而不是“相同日期或较新”时是准确的)。

答案3

我认为你想要的是:

--delete                delete extraneous files from dest dirs

如果源目录中的文件已被删除,则此操作将从目标目录中删除文件。

当然,这意味着您需要停止创建空文件,而不是仅仅删除过期的文件。

相关内容