我有一个情况,我有一个文件让我们在源系统中说TEST.csv。我想在我的destiation系统中同步该文件。每当在TEST.csv中添加新内容或更改某些旧数据时,目标系统中的文件也会更改。 源系统只暴露给rsync,所以除了rsync之外我不能使用任何其他协议。 现在我想单独在TEST.csv中获取已更改的部分。 我该怎么办?
答案 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。只是不要忘记在传输差异之后添加和提交更改,因此下一个循环可以只使用自己的更改进行干净的差异; - )