ローカルファイルとリモートファイルの差分を実行する


39

私はホストに接続していますが、diffを実行する前にリモートファイルを手動でダウンロードすることなく、特定の設定ファイルを別のホストの対応するファイルとssh比較します(diffまたssh、経由でアクセスできます)。


を使用してリモートディレクトリをマウントし、SSHFSローカルのようにアクセスできます。
バーマー14

回答:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

ソース


1
パイプはの結果をダウンロードするだけではありませんcatか。これは実際には元のファイルです。
スティンデウィット

1
パイプは、リモートsshコマンドの結果をlocalfile diffとの比較stdinを待機しているにプッシュします。
fduff

1
「リモートファイルをダウンロードせずに」という要件を誤って解釈している可能性があります。OPは「リモートファイルを手動でダウンロードする必要がない」ことを意味すると思います。:)編集:ああ、あなたはOPです。:)
Stijn de Witt

@StijndeWitt、はい、最初にリモートファイルをscpし、次にdiffを実行することを避けたいと思いました。
fduff14年

18

試してください:

diff local_file <(ssh user@server 'cat remote_file')

または使用vimdiff

vimdiff local_file scp://server//path/to/remote_file

diff local_file <(ssh user@server 'cat remote_file')パスワードなしのSSHでのみ機能しますか?パスワードプロンプトが表示されないようです
...-sdbbs

1
@sdbbs:プロセス置換はバックグラウンドで実行され、標準出力は名前付きパイプ(または匿名の名前付きパイプ)に書き込まれるため、パスワードプロンプトは表示されません。試してみてくださいcat <(ssh user@server 'cat remote_file')cat < <(ssh user@server 'cat remote_file')の違いを見るために。
cuonglm

9

たぶんこれはあなたの正確な場合には役に立たないかもしれませんが、私はしばしば単に使用します

sum -r

各マシンで、手動でチェックサムを比較します。これにより、ssh接続経由で到達できない場合でもファイルの比較が可能になります。もちろん、それが答えるのは「それらは同一ですか」ですが、多くの場合、それは私のニーズに十分です。また、3つまたは4つ以上のマシンで単一のファイルが同じであることを簡単に確認できます。


2
大きなファイルや遅い接続の場合、これは非常に役立つかもしれないと想像できます。ファイルが実際に異なる場合に備えて、ファイル全体のダウンロードを保存します。私よりも優れたBashスクリプターは、おそらくこの答えをリモートが関与する上記の答えと組み合わせて、ファイルが異なると判断された場合catにのみ実際にcatコマンドを実行できます。
スティンデウィット

1
指揮はinfo coreutils 'sum invocation'、とりわけ言う:「『和は、』互換性のために提供され; 『cksumの』プログラム(次のセクションを参照)は、新たな用途に好適です。」
テームLeisti

1

ターミナルセッションでより視覚的なアプローチを希望する場合。真夜中の司令官には、リモートファイルシステムオプション(メニューの[SFTPリンク...]オプション)と視覚的なファイル比較オプションがあります。ほとんどのLinuxシステムにはデフォルトではインストールされませんが、ほとんどのベースリポジトリで利用できます。手順:

  1. mc比較するファイルを含むフォルダーで真夜中の司令官(コマンド:)を開始します
  2. 反対側(メニューなど)で、同じフォルダー(sftp://<user>@<servername>/<path>)にある他のサーバーへのsftpリンクを作成します。
  3. insキーを使用して、比較するファイルを選択/強調表示します。(tab左パネルと右パネルの間で変更)。
  4. 、コマンドメニュー、選択の比較ファイルを

注:通常、深夜の司令官メニューは、ターミナルセッションでマウスを使用してアクセスできます。うまくいかないF9場合でも、メニューが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.