使用可能な接続がsshのみである場合、マシン間でファイル/フォルダーを比較するにはどうすればよいですか?
使用可能な接続がsshのみである場合、マシン間でファイル/フォルダーを比較するにはどうすればよいですか?
回答:
あなたはBashのプロセス置換でそれを行うことができます:
diff foo <(ssh myServer 'cat foo')
または、両方がリモートサーバー上にある場合:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
最後に、私は素晴らしい解決策を見つけました: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 も参照してください。
//
後の2つのスラッシュremotehost
は重要です。シングルスラッシュは機能しません
vimdiff /path/to/file scp://username@remotehost//path/to/file
ここに、もう1つの簡単で汚いコマンドラインレシピを示します。選択した答えとは異なり、メイクファイル内で機能します。
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
1つの方法として、システムで可能な場合は、単にsshfsを使用してリモートファイルシステムをマウントします。
別の回答で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/ .
覚えておいて、これはローカルまたはリモートのファイルが新しいかどうかに関する情報を提供しません。それらが異なる場合。
これは、ローカルフォルダーとリモートフォルダーを比較するのに役立つスクリプトです。
#!/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
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr / bin / ssh user1@192.168.122.1 'ls / opt / lib /')<(/ usr / bin / ssh user2@192.168.122.1 'ls / tmp /')| grep -i ">" | sed 's /> // g'
rsync -ani --delete / root@remotehost:/
が、完全な答えはより詳細を提供します。