使用可能な接続がsshのみである場合、マシン間でファイル/フォルダーを比較するにはどうすればよいですか?
最後に私は素晴らしい解決策を見つけました: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 も参照してください。
Bashの プロセス置換 でそれを行うことができます:
diff foo <(ssh myServer 'cat foo')
または、両方がリモートサーバー上にある場合:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
実際のファイルの差分ではなく、どのファイルが異なるのかを確認したいだけの場合は、rsync --dry-run
を使用できます。
次に、すばやく簡単なコマンドラインレシピを示します。選択した回答とは異なり、メイクファイル内で機能します。
ssh [login]@[Host] "cat [remote file]" | diff - "[local file]"
Scpを使用してファイルを一般的なマシンに移動し、そこで差分を作成しますか?
または、ファイルが異なるかどうかだけを知りたい場合は、各マシンでmd5sumを使用してハッシュします。
[〜#〜] sshfs [〜#〜] のようなものを調べることもできますが、diffのようなアルゴリズムがそれに対してどの程度うまく機能するかはわかりません。
1つの方法として、システムで可能であれば、リモートファイルシステムを sshfs でマウントするだけです。
別の答え で簡単に提案されているように、rsync
を予行モードで使用できます。異なるファイルが一覧表示されます。
そのためには、rvnc
オプション(r
= recursive、v
= verbose、n
= dry-run、c
= checksum )。プルモードのrsync
を使用(rsync [OPTION...] [USER@]Host:SRC... [DEST]
)、例は次のとおりです。
rsync -rvnc [email protected]:/var/www/html/dev/ .
覚えておいてください、これはローカルファイルとリモートファイルのどちらが新しいかに関する情報を提供しません。異なる場合でも。
Sshfsがあり、ディレクトリを比較する必要がある場合:
mkdir remote_path
sshfs user@Host:/path/ remote_path
diff -r path remote_path
ローカルマシンで、比較するディレクトリの再帰的なコピーを作成します。例えば:
cp -R dir replica
rsyncを使用して、ローカルコピーにリモートディレクトリを複製します。
rsync remote:/path/to/dir replica
ローカルディレクトリとリモートディレクトリのローカルレプリカの違いを見つけるには、diffを使用します。
diff dir replica
〜/ .bashrcにbash関数を作成して、アプローチを一般化することもできます。
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
次に、次のような構成で呼び出します。
myrdiff vm20-x86-64 /etc/gdm/Init/Default
-sを付けてdiffを呼び出すと、ファイルが同一かどうかもレポートされます。
乾杯!ジム
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr/bin/ssh [email protected] 'ls/opt/lib /')<(/ usr/bin/ssh [email protected] 'ls/tmp /')| grep -i ">" | sed 's /> // g'
ここに私がそれをした方法があります。
リモートサーバーに対してSFTPを使用し、プロンプトが表示されたらユーザー名/ pwdを入力しました。次に、ホームディレクトリの.gvfsディレクトリに作成されたディレクトリをdiffコマンドで使用しました。
diff -r --brief/home/user dir/.gvfs/SFTP\on\freenas.local/path to dir/dir1/path to local 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
sshfs を使用して、ssh全体にマウントします。それほど速くはありませんが、すべてがローカルファイルシステム上にあることを期待するツールの完全なスイートを使用できます。代わりの方法は、「ssh -w」(またはsshが制限ではない他の通信)で作成されたトンネルを介したNFSです。
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 [email protected] 'cat /etc/ssh/keys-root/authorized_keys')
grepコマンドの成功ステータスを確認する
echo $?
# 0
このアイデアを使用して、パスワードなしのSSHログインを設定します。
if ! grep "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh [email protected] cat /etc/ssh/keys-root/authorized_keys) &>/dev/null; then
cat ~/.ssh/id_rsa.pub | sshpass -p "mypassword" ssh [email protected] "cat >> /etc/ssh/keys-root/authorized_keys"
fi
ssh [email protected]
注:sshpass
コマンドに非対話的にパスワードを渡すためにssh
パッケージがインストールされていることを確認してください。