如何通过SSH的差异?

如何跨机器区分文件/文件夹,只有可用的连接是ssh?

你可以用Bash的stream程replace来做到这一点:

  diff foo <(ssh myServer 'cat foo') 

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

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

最后我find了很好的解决scheme: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

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

这是另一个快速而肮脏的命令行配方。 与select的答案不同,它可以在makefile中使用:

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

使用scp把文件放到一台普通的机器上,然后把它们分别出来吗?

或者,如果你只是想知道这些文件是否有不同,请在每台机器上使用md5sum进行哈希处理。

你也可以看看SSHFS之类的东西,但是我不知道像diff这样的algorithm在这方面performance如何。

一种方式,如果你的系统是可能的,只需要用sshfs挂载远程文件系统即可。

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

为此,使用rvnc选项( r =recursion, v =详细, n =干运行, c =校验和)。 在rsync模式下( rsync [OPTION...] [USER@]HOST:SRC... [DEST] ),一个例子是:

 rsync -rvnc [email protected]:/var/www/html/dev/ . 

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

  • 在您的本地机器上,制作一个您想要区分的目录的recursion副本。 例如:

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

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

     diff dir replica 

如果你有sshfs并需要diff目录:

 mkdir remote_path sshfs user@host:/path/ remote_path diff -r path remote_path 

这是我如何做到的。

我使用SFTP到远程服务器,并提示时input我的用户名/密码。 然后,我使用在diff命令中的主目录中的.gvfs目录中创build的目录。

diff -r –brief / home / user dir / .gvfs / SFTP \ on \ freenas.local /path到dir / dir1 /path到本地dir / dir2

这是一个可以帮助区分本地文件夹和远程文件夹的脚本。

  #!/bin/bash LOCALFOLDER=/var/www/tee REMOTEFOLDER=$(ssh [email protected] 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt) COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt) REM=$(cat remotessh.txt) LOCAL=$(cat localssh.txt) echo $LOCAL echo $REM if [ $REM -eq $LOCAL ] then echo Directories are the same else echo Directories are differnt fi #diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2 

http://myfedora.co.za/2012/04/diff-two-remote-file-systems/

diff <(/ usr / bin / ssh [email protected].1'ls / tmp /')</ usr / bin / ssh [email protected].1' grep -i“>”| > sed's /> // g'

使用安装在ssh上的sshfs 。 它不会那么快,但是您可以使用您的全套工具,希望一切都在本地文件系统上。 另一种方法是通过使用“ssh -w”(或其他通信,其中ssh不是限制)创build的隧道。

你也可以尝试通过创build一个bash函数来概括这个方法,可能在〜/ .bashrc中:

 myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; } 

然后用如下的构造来调用它:

 myrdiff vm20-x86-64 /etc/gdm/Init/Default 

通过用-s调用diff,这也会报告文件是否相同。

干杯! 吉姆