题 diff如何超过ssh?


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


166
2017-08-26 17:17




有一个相对类似的问题 #16661:我如何区分两台RedHat Linux服务器?。那里的答案是为了节省点击次数 rsync -ani --delete / root@remotehost:/ 但 完整的答案 提供更多细节。 - Owen Blacker
这里有很多答案,但哪种方法更快? - pl1nk
没人用 视觉差异工具? - Dan Dascalescu


答案:


你可以用Bash来做 过程替代

 diff foo <(ssh myServer 'cat foo')

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

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')

142
2017-08-26 17:22



是的,像这样的东西,但目录:) - Alexey Timanovsky
你是怎么对目录的意思,总是可以用ls取代cat - Kyle Brandt♦
我怀疑'for directories'意味着做一个递归的diff - Ian Clelland
我发现如果我的远程主机需要密码,这种技术对我不起作用。密码提示似乎无法正常使用重定向,无法成功完成。如果你使用ssh密钥,这应该不是问题。 - Adam Franco
这是许多问题的一个很好的通用解决方案。而不是'cat foo'你可以使用'find / foo / bar -type f |同时读取文件;做echo“**** $ file”;猫“$ file”;完成'你有一个文件名列表和文件内容差异。 - Paul Gear


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

vimdiff /path/to/file scp://remotehost//path/to/file

谢谢 http://linux.spiney.org/remote_diff_with_vim_and_ssh 也可以看看 http://www.vim.org/scripts/script.php?script_id=1075 。


98
2018-05-15 08:55



vimdiff很甜蜜,谢谢! - Max Felker
目录怎么样? :) - Perlnika
这是一个例子:vimdiff .bash_profile scp://vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile - vaichidrewar
2斜杠 // 之后 remotehost 很重要单斜杠不起作用 - Lee Chee Kiam
如果远程主机上的用户名与当前主机不同,则可以使用 vimdiff /path/to/file scp://username@remotehost//path/to/file - JaredC


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


58
2017-09-04 11:14



rsync -n是短版本。 - volni
太棒了 - 如果你需要使用另一个端口,请使用rsync -e“ssh -p 2222”<SRC> <DST> - Samoth


这是另一个快速而又脏的命令行配方。与选择的答案不同,它在makefile内部起作用:

ssh [login]@[host] "cat [remote file]" | diff - "[local file]"

15
2017-12-27 18:43



如果我的编辑没有通过:此方法优于所选答案,因为它适用于makefile。 - Chris Redford
@Steve Dickinson - 你是什么意思“它在makefile里面工作”? - Martin Vegter
如果您像我一样患有过敏症,这也是一个很好的解决方案。 :)我创建了一个bash脚本,用于比较两个不同主机上的相同文件,在机器之间迁移服务和比较配置文件时非常有用。看到 gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff - Janek


使用scp将文件带到一台普通的机器并将它们区分开来?

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

你也可以看一下像 SSHFS,但我不知道像diff这样的算法表现如何。


10
2017-08-26 17:19



查看文件是否不同的更简单方法是 rsync --dry-run。 - Gerald Combs
我忘记了SSHFS。这对我很有用...... - arod


一种方法,如果你的系统可以使用,只需安装远程文件系统 SSHFS


7
2017-08-26 17:19



diff通常是一次性动作,比如检查配置差异。每次都可以挂载文件系统,但不方便。我最好tar和scp。 - Alexey Timanovsky


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

为此,使用 rvnc 选项(r=递归的, v=冗长, n=干跑 c=校验和)。同 rsync 在拉模式下(rsync [OPTION...] [USER@]HOST:SRC... [DEST]),一个例子是:

rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .

记得,这不提供有关本地或远程文件是否更新的信息。只是他们不同。


3
2018-04-29 12:21





  • 在本地计算机上,制作要扩散的目录的递归副本。例如:

    cp -R dir replica
    
  • 使用rsync通过本地副本复制远程目录:

     rsync remote:/path/to/dir replica
    
  • 使用diff来查找本地目录和远程目录的本地副本之间的差异:

    diff dir replica
    

2
2018-01-30 13:16