通过rsync找出文件的不同部分

时间:2017-06-11 16:40:44

标签: rsync

我有一个情况,我有一个文件让我们在源系统中说TEST.csv。我想在我的destiation系统中同步该文件。每当在TEST.csv中添加新内容或更改某些旧数据时,目标系统中的文件也会更改。 源系统只暴露给rsync,所以除了rsync之外我不能使用任何其他协议。 现在我想单独在TEST.csv中获取已更改的部分。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您只想传输TEST.csv的更改部分而不是整个文件,是吗? 如果是这种情况,我认为不可能这样做。这直接来自man rsync

The rsync remote-update protocol allows rsync to transfer just the differences between two sets of files across the network connection, using an efficient checksum-search algorithm described in the technical report that accompanies this package.

关键部分是using an efficient checksum-search algorithm - 它针对本地和远程文件运行校验和,如果校验和不同,则将文件从源传输到目标。基于校验和,无法分辨文件的哪个部分已更改并仅传输差异。

您可以使用本地版本控制工具,例如: git,并使用该工具获取同步周期之间的差异。当您拥有diff时,可以将其存储在文件中,通过rsync传输它,然后使用目标端的patch实用程序将此差异应用于TEST.csv

不需要

git,您可以在源上使用简单的diff -u,在目标上使用patch,但要使用差异,您必须跟踪旧的TEST.csv使用新的更改添加新的TEST.csv,然后针对它运行diff。使用git,您只需使用您想要的任何工具编辑文件,然后git使用其内部机制为更改创建正确的diffset。只是不要忘记在传输差异之后添加和提交更改,因此下一个循环可以只使用自己的更改进行干净的差异; - )