如何跨机器区分文件/文件夹,只有可用的连接是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
如果你只是想看看哪些文件是不同的,而不是实际文件的差异,那么你可以使用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,这也会报告文件是否相同。
干杯! 吉姆