在本地和远程文件之间运行差异


39

我通过连接在主机上ssh,我想将diff某个配置文件与另一台主机上的对应配置文件进行比较(也可以通过进行比较)ssh,而不必通过运行diff来手动下载远程文件。


您可以使用挂载远程目录SSHFS,然后像访问本地目录一样对其进行访问。
Barmar 2014年

Answers:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

资源


1
管道不会只是下载的结果cat,而实际上只是原始文件吗?
Stijn de Witt 2014年

1
管道会将远程ssh命令的结果推送到diff正在等待stdin与localfile 比较的命令。
fduff

1
也许我误解了“无需下载远程文件”的要求。我猜OP的意思是“无需手动下载远程文件”。:)编辑:啊,你是OP。:)
Stijn de Witt 2014年

@StijndeWitt,是的,我想,以避免到第一SCP远程文件,然后执行差异..
fduff

18

尝试:

diff local_file <(ssh user@server 'cat remote_file')

或使用vimdiff

vimdiff local_file scp://server//path/to/remote_file

难道diff local_file <(ssh user@server 'cat remote_file')只为密码的ssh的工作?我似乎无法收到密码提示...
sdbbs

1
@sdbbs:进程替换在后台运行,并且标准输出被写入命名管道(或匿名命名管道),因此您不会收到密码提示。尝试cat <(ssh user@server 'cat remote_file')cat < <(ssh user@server 'cat remote_file')看到的差异。
cuonglm

9

也许这对您的实际情况没有帮助,但是我经常简单地使用

sum -r

在每台计算机上,并手动比较校验和。这样即使在无法通过ssh连接访问文件的情况下,也可以进行文件比较。当然,所有答案都是“它们是否相同”,但是通常这足以满足我的需求。它还使在3个或4个或更多计算机上验证单个文件是否相同变得容易。


2
我可以想象,对于大文件或慢速连接,这可能非常有用。当文件实际不同时,它将保存整个文件的下载。比我自己更好的Bash脚本编写者可能可以将此答案与以上涉及遥控器的答案结合起来,cat以便仅cat在确定文件不同时才实际运行命令。
Stijn de Witt 2014年

1
Commanding info coreutils 'sum invocation'表示:“尤其是为了兼容性,提供了'sum';在新应用程序中,最好使用'cksum'程序(请参阅下一节)。”
Teemu Leisti

1

如果您希望在终端会话中使用更直观的方法。午夜指挥官具有远程文件系统选项(菜单中的SFTP链接...选项)和可视文件比较选项。默认情况下,在大多数Linux系统上未安装该软件,但在大多数基本存储库中都可用。脚步:

  1. mc在包含要比较文件的文件夹中启动午夜指挥官(命令:)
  2. 在另一侧(例如,右键菜单),在同一文件夹(sftp://<user>@<servername>/<path>)上创建到其他服务器的sftp链接。
  3. 使用ins键选择/突出显示要比较的文件。(tab在左右面板之间切换)。
  4. 命令菜单中,选择比较文件

注意:通常可以在终端会话中使用鼠标访问午夜指挥官菜单。它不起作用,也F9会使您进入菜单。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.