2014-01-07 3 views
33

ローカルのホストのディレクトリとリモートのLinuxマシンのディレクトリを再帰的に比較しようとしています。私は、次のコマンドを実行したときただし、:ssh経由でディレクトリをdiffする方法

デフ:SSH [email protected]:/ホーム/管理者:そのようなファイルやディレクトリは

いいえ

diff -r 'ssh [email protected]:/home/admin' /home/admin 

をそれは言って動作しません。

ディレクトリの内容を再帰的に比較する正しい方法は何ですか?事前

+1

関連:http://serverfault.com/questions/59140/how-do-diff-over-ssh – fedorqui

+1

このリンクは、ファイルを比較する方法について説明します。 dirを比較するときには機能しません。 –

答えて

30

、ちょうどディレクトリ/ファイル名の違いを取得し、これを試してみてください。

(注:詳細は、「SSHログインパスワードなし」に設定する必要、見直し、これをURL:http://www.linuxproblem.org/art_9.html

diff <(ssh [email protected] ls -R /home/admin) <(ls -R /home/admin) 
+2

のようなIDEでマウントされたディレクトリを使用することができますsshがパスワードを尋ねると、自動的に応答します。 : diff(ssh [email protected] find/home/admin -printf '"%8s%p \ n"')<(home/admin -printf '%8s%p \ n'を検索してください) このシステム許可された使用のみを目的としています。 [email protected]のパスワード: 許可が拒否されました。もう一度お試しください。 [email protected]のパスワード: 許可が拒否されました。もう一度お試しください。 [email protected]のパスワード: 許可が拒否されました(公開鍵、パスワード)。 –

+0

最初にSSHセッションに非パスワードを設定する必要があります – BMW

+0

答えを更新しました。このURLを確認してください。http://www.linuxproblem.org/art_9.html – BMW

15

おかげで、ちょうど「予行演習」を行い、それがどうなるのかを説明します「-n」オプションで「rsyncのを」使用してみてください。

+3

'-c'は日付と長さだけでなく、チェックサムを調べるようrsyncに指示します。 – Mike

+3

' --delete'が必要です。それがなければ、2台目のマシンに存在するファイルは見えませんが、1台目のマシンには存在しません。 '' -n''を実行してください。 – JellicleCat

+1

もちろん、あなたの再帰には '-r'や' -a'も必要ですが、ディレクトリ名の後ろにバックスラッシュを追加することを忘れないでください(しかしスターはありません)。そうでなければ '--delete'は何も返しません削除。あなたのコマンドは 'rsync -e 'ssh -p 22' -azvn -delete [email protected]:/ home/admin// home/admin /'になります。 – TNT

9

sshfsでリモートディレクトリをマウントすると、diff -rを使用して、2つのディレクトリを比較して比較できます。

また、両方のマシンで同様のfindコマンドを実行して、ファイルツリー(ファイル名、サイズ、日付など)を印刷し、両方の出力をdiffで比較することもできます。もちろんこれは、ファイルの内容を比較しません:sshコールでprintfのフォーマット文字列の引用

diff <(ssh host find /home/admin -printf '"%8s %P\n"') \ 
    <(find /home/admin -printf '%8s %P\n') 

お知らせダブル。 1つのレイヤーは、sshリレーによって削除されます。あなたは、ファイル内の詳細をdiffをする必要はありません場合は

+0

'find'コマンドの出力を' diff'で比較する前に 'sort'すると便利です。その場合は、パスを出力の最初の要素として使用します。 '<(find/home/admin -printf"%p%s \ n "| sort)' – Alfe

+1

%Pよりも%Pを使う方が良いので、各サーバー上の異なるフォルダにあるdiffディレクトリ – reox

+0

ありがとう@reox、私はそれに応じて私の答えを変更しました。実際には、私は通常これを 'cdディレクトリ内で使用します。-printf ...) 'この場合、'%p'や '%P'が使われても違いはありません。ここにそれがあります。 – Alfe

関連する問題