获取rsync来生成补丁文件,而不是跨文件复制?

我正在使用rsync将大量的文件从一台服务器复制到另一台服务器。 我知道我可以使用-n选项进行空运行,所以我可以看到哪些文件已经被更改。 但是,有可能得到rsync打印文件内容的变化的差异? 我想看看发生之前发生了什么? 一些我可以保存到一个文件,并在稍后使用diff(1)?

    可能有更好的办法,但这可能会奏效,虽然效率不高:

      rsync -vrn / dest:/ > ~/file_list 

    然后编辑testing删除统计信息,然后:

     while read file; do diff $file <(ssh dest "cat $file") done < ~/edited_file_list 

    另一种select:
    你也可以考虑用sshfs / fuse之类的东西安装文件系统,然后使用diff。

    rsync不能做到这一点本身,但如果有可能使用统一你可以从中产生差异风格的格式。

    这本来是不可能的,因为rsync只关心文件之间的二进制差异。

    您可以使用rsync的输出来编写脚本。 但是这将是hackish。

    尽pipe如此,我确实认为Unison本身就是可能的。

    为什么不只是使用diff(用于文本文件)或xdelta(用于二进制文件)来生成差异? 为什么你需要专门从rsync中获取一些东西?

    为了扩大凯尔的答案,这个过程自动化。 请注意,这是完全未经testing,可能非常脆弱,并可能会删除您的电脑,并杀死你的狗。

     #!/bin/bash REMOTE=${1?Missing Remote Path} LOCAL=${2?Missing Local Path} # Trim trailing slash since we'll be adding it as a separator later REMOTE=${REMOTE%/} LOCAL=${LOCAL%/} #Break it down RHOST=${REMOTE%:*} RPATH=${REMOTE#*:} while read FILE; do diff -u ${LOCAL}/${FILE} <(ssh $RHOST "cat ${RPATH}/${FILE}") done < <(rsync -vrn $REMOTE/ $LOCAL/ | sed '1d;/^$/q') 

    rsyncalgorithm通过比较文件的二进制块来工作。 这种二进制差异并不意味着可打印。 有一个名为rdiff的命令 ,它使用rsyncalgorithm来生成一个二进制比较,但我认为它不会对你所描述的有用,它通常用来实现增量备份。