如何通过 ssh 区分?

Ale*_*sky 194 diff

如果唯一可用的连接是 ssh,我如何在机器之间区分文件/文件夹?

Kyl*_*ndt 175

您可以使用 Bash 的进程替换来实现

 diff foo <(ssh myServer 'cat foo')
Run Code Online (Sandbox Code Playgroud)

或者,如果两者都在远程服务器上:

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑“对于目录”意味着进行递归差异 (29认同)
  • 是的,像这样,但对于目录:) (14认同)
  • 我发现如果我的远程主机需要密码,这种技术对我不起作用。密码提示似乎不适用于重定向,无法成功完成。如果您使用 ssh 密钥,这应该不是问题。 (10认同)
  • 这是许多问题的一个很好的通用解决方案。您可以使用 'find /foo/bar -type f | 而不是 'cat foo' 读取文件时;做 echo "**** $file"; 猫“$文件”;done' 并且您将获得要区分的文件名和文件内容的列表。 (2认同)

Ale*_*sky 116

最后我找到了很好的解决方案:vimdiff

vimdiff /path/to/file scp://remotehost//path/to/file
Run Code Online (Sandbox Code Playgroud)

感谢http://linux.spiney.org/remote_diff_with_vim_and_ssh 另见http://www.vim.org/scripts/script.php?script_id=1075

  • 目录呢?:) (10认同)
  • `remotehost` 后面的 2 个斜线 `//` 很重要。单斜线不起作用 (5认同)
  • 如果远程主机上的用户名与当前主机不同,则可以使用 `vimdiff /path/to/file scp://username@remotehost//path/to/file` (2认同)

Ama*_*rus 68

如果您只想查看哪些文件不同,而不是实际文件的差异,那么您可以使用 rsync --dry-run

  • rsync -n 是简短版本。 (13认同)

小智 17

这是另一个快速而肮脏的命令行秘诀。与选择的答案不同,它在 makefile 内工作:

ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
Run Code Online (Sandbox Code Playgroud)


Ian*_*and 10

使用 scp 将文件带到一台普通机器上并在那里进行比较?

或者,如果您只想知道文件是否不同,请在每台机器上使用 md5sum 散列它们。

你也可以研究类似SSHFS 的东西,但我不知道像 diff 这样的算法在它上面的表现如何。

  • 查看文件是否不同的更简单方法是`rsync --dry-run`。 (2认同)

Zor*_*che 7

一种方法是,如果您的系统可能,只需使用sshfs挂载远程文件系统。


zza*_*per 5

您可以rsync在试运行模式下使用,如另一个答案中的简要建议。它列出了任何不同的文件。

为此,请使用rvnc选项(r=recursive、v=verbose、n=dry-run、c=checksum)。与rsync在拉模式(rsync [OPTION...] [USER@]HOST:SRC... [DEST]),一个例子是:

rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
Run Code Online (Sandbox Code Playgroud)

请记住,这不提供有关本地文件还是远程文件更新的信息。只要他们不同。