超越比较远程与本地文件

8

我想比较两个文本文件,一个在远程,另一个在本地。使用diff命令可以实现:

ssh user@login "cat myfile.txt" | diff - local.txt

有没有一种方法可以使用Beyond Compare执行相同的比较?如果我这样做:
ssh user@login "cat myfile.txt" | bcompare - local.txt

我只能看到本地文件。
3个回答

8

在这种情况下我使用的一个小技巧是用sshfs将远程目录映射为本地目录,以便在Beyond Compare中访问:

sshfs user@host:/opt/data /tmp/transfer

然后,您可以使用任何差异工具通过 diff -Nur /local/data/dir /tmp/transfer 或像往常一样使用Beyond Compare 来比较本地数据和远程数据,并根据需要复制文件。请注意,您可能需要通过包管理器安装sshfs,例如在Debian / Ubuntu上通过apt-get install sshfs。 可能的选项包括:
  • -o PubkeyAuthentication=no:如果您需要密码验证,但ssh首先尝试太多的私钥验证,则不需要此选项,如果您对此服务器使用私钥验证或根本不使用私钥验证,则不需要此选项。
  • -o sshfs_debug:如果身份验证/连接失败,则打印更多信息。
  • -o idmap=user:使用idmap = user选项将连接用户的UID转换为远程用户的UID。
  • -o gid=1000:uid,gid-将文件的报告所有权设置为给定值; uid是您的用户的数字用户ID,gid是您的用户的数字组ID。
  • -o nomap=error:如果无法执行用户映射,则失败。
有关详细信息,请参见https://wiki.archlinux.org/index.php/SSHFS

哇,你的技巧非常有效。你介意解释一下这些选项代表什么吗?谢谢。 - Manfredo
完成了,我只是在一个场景中恰好使用了它们,它们不是必需的,但通常很有用,我解释了一下它们的作用,并提供了一些更多信息的链接。 - centic

6

Beyond Compare Pro包含内置的SFTP支持,因此您可以将SFTP URL直接作为命令行参数传递给它。

bcompare local.txt sftp://user:password@server/folder/file.txt

如果您在URL中没有提供密码,Beyond Compare将提示您输入密码。
bcompare local.txt sftp://user@server/folder/file.txt

1
我不确定这是否适用于我的情况。我想将本地文件与我在远程集群目录中拥有的文件进行比较。我通常通过以下方式访问它: ssh name@login.xxx "cd my/directory/" - Manfredo
1
许多支持SSH的服务器也支持SFTP。在您的示例中,您将使用命令行:bcompare sftp://name@login.xxx/my/directory/file.ext - Chris Kennedy
1
@ChrisKennedy,Beyond Compare Pro是否支持使用私有RSA密钥进行SFTP身份验证(类似于ssh的-i选项)?还是只支持基于密码的身份验证? - Dmitriusan
1
是的,Beyond Compare Pro支持SFTP的私钥认证。https://www.scootersoftware.com/support.php?zz=kb_sftp_privatekey - Chris Kennedy
1
很好,但这似乎无法与AWS CodeCommit一起使用,因为它接受以ssh://开头的网址,而不是BC使用的默认sftp://。是否有任何解决方法来指定网址中的其他协议?例如 ssh://https:// - SteveR
1
抱歉,Beyond Compare不支持ssh:// URL。 - Chris Kennedy

0
BeyondCompare提供了比较本地文件系统和远程文件的功能。如果要访问远程文件,例如在Linux服务器上,请尝试使用“浏览”选项卡,并选择QuickConnect。选择FTP配置文件-->选择协议SFTP(SSH2)。提供您的主机、端口、用户名和密码。点击保存并连接。它将显示远程文件系统,以选择任何远程文件或文件夹。

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