在不同服务器上比较文件的Diff命令--Unix

20

我可以使用 diff 命令比较两个不同服务器上的文件吗?如果不能,还有其他选项吗?

5个回答

32

你可以使用scp从另一个服务器复制文件,然后使用diff进行比较。

或者通过ssh连接到远程主机并使用以下单个命令进行diff比较:

ssh user@remote "cat /path/to/remote/file" | diff - /path/to/local/file

只是想确认第一个解决方案是否为优化解决方案,当我们尝试比较两个服务器上的大量文件时?它不会将目标服务器上复制的文件加载到源服务器上吗? - Mukul Chikhalkar

12

我知道这是一个晚回答,但我按照字面意思回答,没有本地文件,只有两个远程文件
bash(不仅如此)中,可以使用进程替换[1,2] <(...)

diff <(ssh Server1 'cat /path/to/file1') <(ssh Server2 'cat /path/to/file2')

进程<(list)以异步方式运行,其输入或输出显示为文件名。

注意:

  • 当然,如果您只需要一个远程文件,可以将本地文件放置在其中一个<(...)之前。
  • 如果两个文件都在同一服务器上,则可以使用更简单的方式。

    ssh Server1 'diff /path/to/file1 /path/to/file2'
    

11
如果你需要比较多个文件,那么可以查找rsyncrdiff,它们可以节省复制所有文件所需的带宽。
顺便提一下,如果你的文件非常大,请在问题中更新相关信息。

5
“-”是针对标准输入的差异。您可以像这样操作:
ssh server 'cat file_to_diff' | diff -u localfile -

0

如果您正在解决AWS实例问题,那么停止instanceA并将其驱动器附加到要与之比较的instanceB可能是有意义的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接