rsyncを取得して、ファイル間でコピーする代わりにパッチファイルを生成しますか?


19

rsyncを使用して、あるサーバーから別のサーバーに変更された多くのファイルをコピーしています。-nオプションを使用してドライランを実行できることを知っているので、どのファイルが変更されたかを確認できます。しかし、変更されたファイルの内容の差分を印刷するためにrsyncを取得することは可能ですか?コピーする前に何が起こっているのか見たいのですが?ファイルに保存して、後でdiff(1)で適用できるものはありますか?

回答:


8

より良い方法があるかもしれませんが、これは効率的ではありませんが、うまくいくかもしれません:

 rsync -vrn / dest:/ > ~/file_list

次に、テストを編集して統計を削除してから、次の操作を行います。

while read file; do
    diff $file <(ssh dest "cat $file")
done < ~/edited_file_list

別のオプション:
sshfs / fuseのようなファイルシステムをマウントしてから、diffを使用することも検討できます。


注:これらのコマンドはテストしませんでした;
カイルブラント

など良いスタートが、統計などのrsyncから余分な出力、のそこの負荷、および「増分ファイルリストを送信する」、
ロリー

--out-format = "%f"を使用できます
カイルブラント

あなたは、アウトフォーマットを使用する場合は、Vを落とし、とgrep -v「飛び非正規ファイル」...それはかなりきれいに取得する必要があります
カイルブラント

偶然に新しい/より良い方法がある場合だけチェックrsync --diff2年後...
リングØ



1

rsyncはファイル間のバイナリの違いのみを考慮するため、ネイティブでは不可能です。

rsyncの出力を使用して、スクリプトを作成できる場合があります。しかし、それはハックです。

ただし、Unisonを使用すればネイティブに実現できると考えています。


1
私のハックはどういう意味ですか?:-)
カイルブラント

絶対に、カイル:D
ダンカーリー

1

diff(テキストファイルの場合)またはxdelta(バイナリファイルの場合)のようなものを使用して、diffを生成しないのはなぜですか?なぜrsyncから何かを具体的に取得する必要があるのですか?


私はrsyncのを必要としませんが、それは、リモートする必要が
ロリー・

やばい!
ワンブル

1

カイルの答えを拡張するために、これはプロセスを自動化します。完全にテストされておらず、おそらく非常に壊れやすく、コンピューターを削除して犬を殺す可能性があることに注意してください。

#!/bin/bash

REMOTE=${1?Missing Remote Path}
LOCAL=${2?Missing Local Path}

# Trim trailing slash since we'll be adding it as a separator later
REMOTE=${REMOTE%/}
LOCAL=${LOCAL%/}

#Break it down
RHOST=${REMOTE%:*}
RPATH=${REMOTE#*:}

while read FILE; do
    diff -u ${LOCAL}/${FILE} <(ssh $RHOST "cat ${RPATH}/${FILE}")
done < <(rsync -vrn $REMOTE/ $LOCAL/ | sed '1d;/^$/q')

0

rsyncアルゴリズムは、ファイルのバイナリチャンクを比較することで機能します。このようなバイナリdiffは、印刷可能という意味ではありません。rsyncアルゴリズムを使用してバイナリdiffを生成するrdiffと呼ばれるコマンドがありますが、それが説明に役立つとは思わないため、増分バックアップの実装によく使用されます。

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