#1 楼
您可以使用Bash的进程替换来做到这一点: diff foo <(ssh myServer 'cat foo')
或者,如果两个都在远程服务器上:
评论
是的,类似这样,但对于目录:)
–阿列克谢·蒂曼诺夫斯基(Alexey Timanovsky)
09年8月26日在17:29
您如何表示目录,总是可以用ls代替cat
–凯尔·勃兰特(Kyle Brandt)
09年8月26日在17:29
我怀疑“对于目录”意味着进行递归比较
–伊恩·克莱兰德
09年8月26日在17:36
我发现如果我的远程主机需要密码,则该技术对我不起作用。密码提示似乎不能很好地用于重定向,并且无法成功完成。如果您使用ssh键,这应该不是问题。
–亚当·佛朗哥(Adam Franco)
2012年1月24日14:28
这是解决许多问题的很好的通用解决方案。可以使用'find / foo / bar -type f |代替'cat foo'。在读取文件时;做回声“ **** $文件”;猫“ $文件”;完成”,您将获得要比较的文件名和文件内容的列表。
– Paul Gear
2014年11月11日在22:22
#2 楼
最后,我找到了一个很好的解决方案:vimdiffvimdiff /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。
评论
那目录呢? :)
– Perlnika
2013年12月16日16:13
这是一个示例:vimdiff .bash_profile scp://vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile
–vaichidrewar
2014-02-19 22:56
//在remotehost很重要之后,加2斜杠。单斜杠不起作用
–李志坚
2014年4月7日在2:05
如果远程主机上的用户名与当前主机上的用户名不同,则可以使用vimdiff / path / to / file scp:// username @ remotehost // path / to / file
– JaredC
2014年5月19日15:21
如何使用两个具有id_rsa密钥文件@JaredC的远程主机执行此操作?
–Manatax
15年3月12日在18:01
#3 楼
如果您只想查看哪些文件不同,而不是实际文件的差异,则可以使用rsync --dry-run
评论
rsync -n是简短版本。
– volni
2012年1月3日23:48
很好-如果您需要使用其他端口,请使用rsync -e“ ssh -p 2222”
–萨莫斯(Samoth)
15年7月12日在6:22
#4 楼
这是另一个又快又脏的命令行食谱。与选择的答案不同,它可以在makefile中使用:ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
评论
如果我的编辑没有通过:此方法优于所选答案,因为它可以与makefiles一起使用。
–克里斯·雷德福(Chris Redford)
2013年9月13日在21:36
@Steve Dickinson-“它在makefile中起作用”是什么意思?
–马丁·维格特(Martin Vegter)
2014年5月25日13:43
如果您像我一样遭受vim过敏,这也是一个不错的解决方案。 :)我创建了一个bash脚本,用于比较两个不同主机上的相同文件,这在计算机之间迁移服务和比较配置文件时很有用。参见gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
–詹纳克
16-10-14在9:09
如果您的远程主机需要密码,此解决方案也可以使用。
–ishmael
6月29日0:33
#5 楼
或者,如果您只想知道文件是否不同,请在每台计算机上使用md5sum对其进行哈希处理。
您也可以研究SSHFS之类的东西,但我不知道diff之类的算法在此方面的表现如何。
评论
rsync --dry-run是查看文件是否不同的更简单方法。
–通用梳子
09年8月26日在20:18
我忘记了SSHFS。这对我来说很棒
–香精
2014年9月17日下午16:36
#6 楼
一种方法是,如果可能的话,只需使用sshfs挂载远程文件系统。评论
diff通常是一次性操作,喜欢检查配置差异。每次都可以挂载文件系统,但并不方便。我最好是tar和scp。
–阿列克谢·蒂曼诺夫斯基(Alexey Timanovsky)
09年8月26日在17:28
#7 楼
您可以在空运行模式下使用rsync
,如另一个答案中简要建议的那样。它列出了所有不同的文件。为此,请使用rvnc
选项(r
=递归,v
=详细,n
=空运行,c
= checksum)。在rsync
处于拉模式(rsync [OPTION...] [USER@]HOST:SRC... [DEST]
)的情况下,示例为:就算它们不同。#8 楼
在本地计算机上,递归复制要比较的目录。例如:
cp -R dir replica
使用rsync在本地副本上复制远程目录:
rsync remote:/path/to/dir replica
使用diff查找远程目录的本地目录和本地副本之间的差异:
diff dir replica
#9 楼
如果您有sshfs,并且需要比较目录:mkdir remote_path
sshfs user@host:/path/ remote_path
diff -r path remote_path
#10 楼
这是我的操作方法。我使用SFTP到远程服务器,并在出现提示时输入我的用户名/密码。
然后我使用了在.gvfs目录中创建的目录diff命令中的主目录。
diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / dir / dir1的路径/ local dir / dir2的路径
#11 楼
这是一个可以帮助区分本地文件夹和远程文件夹的脚本。: #!/bin/bash
LOCALFOLDER=/var/www/tee
REMOTEFOLDER=$(ssh root@111.111.111.1 '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
#12 楼
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/” | | sed's /> // g'
#13 楼
使用跨ssh挂载的sshfs。并不会很快,但是您可以使用全套工具来期望所有内容都在本地文件系统上。另一种选择是通过“ ssh -w”(或其他不受ssh限制的通信)建立的隧道上的NFS。#14 楼
您也可以尝试通过创建bash函数来推广该方法,可能在您的〜/ .bashrc中:myrdiff() { ssh root@"" cat "" | diff -s - "" ; }
,然后使用类似以下的构造调用它:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
通过用-s调用diff,这还将报告文件是否相同。
干杯!吉姆
#15 楼
使用grep
remote ip: 172.16.98.130
remote file: /etc/ssh/keys-root/authorized_keys
local file: ~/.ssh/id_rsa.pub
现在使用
grep
比较远程文件的内容与本地文件grep -w "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh root@172.16.98.130 'cat /etc/ssh/keys-root/authorized_keys')
检查grep命令的成功状态
echo $?
# 0
使用此思想来设置SSH无密码登录:
if ! grep "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh root@172.16.98.130 cat /etc/ssh/keys-root/authorized_keys) &>/dev/null; then
cat ~/.ssh/id_rsa.pub | sshpass -p "mypassword" ssh root@172.16.98.130 "cat >> /etc/ssh/keys-root/authorized_keys"
fi
ssh root@172.16.98.130
注意:
请确保已安装
sshpass
软件包,以便非交互地将密码传递给ssh
命令。评论
sshpass在您的日志中保留未加密的密码。我不会在生产中使用它。设置用于登录的SSH密钥。
–马克·斯图尔特
3月9日15:24
评论
#16661有一个相对类似的问题:如何区分两个RedHat Linux服务器?用来保存点击次数的答案是rsync -ani --delete / root @ remotehost:/,但完整答案提供了更多细节。这里有很多答案,但是哪种方法更快?
没人使用视觉差异工具吗?