Rsyncを使用して、あるサーバーから別のサーバーに変更された多くのファイルをコピーしています。 -n
予行演習を行うオプション。変更されたファイルを確認できます。ただし、変更されたファイルの内容の差分をrsyncに出力させることは可能ですか?コピーする前に何が起こっているのか見たいのですが?ファイルに保存して、後でdiff(1)で適用できるものはありますか?
もっと良い方法があるかもしれませんが、これは効率的ではありませんが、うまくいくかもしれません:
rsync -vrn / dest:/ > ~/file_list
次に、テストを編集して統計を削除し、次に:
while read file; do
diff $file <(ssh dest "cat $file")
done < ~/edited_file_list
別のオプション:
sshfs/Fuseのようなものでファイルシステムをマウントしてから、diffを使用することも検討してください。
パッチを作成する場合:
rsync -arv --only-write-batch=patch old/ new/
適用するには:
rsync -arv --read-diff=patch dir/
または自動生成されたスクリプトを使用します。
./patch.sh
出典:
rsyncはこれをネイティブで行うことはできませんが、 nison を使用する可能性がある場合は、そこからdiffスタイルの形式を作成できます。
Rsyncはファイル間のバイナリの違いのみを考慮するため、ネイティブでは不可能です。
Rsyncの出力を使用して、スクリプトを作成できる場合があります。しかし、それはハックになるでしょう。
私はそれが nison でネイティブに可能であると信じています。
なぜdiff(テキストファイルの場合)またはxdelta(バイナリファイルの場合)などを使用してdiffを生成しないのですか?なぜrsyncから何かを特別に取得する必要があるのですか?
カイルの答えを拡張するために、これはプロセスを自動化します。これは完全にテストされておらず、おそらく非常に壊れやすく、コンピュータを削除して犬を殺す可能性があることに注意してください。
#!/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')
Rsyncアルゴリズムは、ファイルのバイナリチャンクを比較することで機能します。このようなバイナリdiffは、印刷可能であることを意味していません。 rsyncアルゴリズムを使用してバイナリdiffを生成する rdiff というコマンドがありますが、あなたが説明していることには役に立たないと思います。通常、増分バックアップの実装に使用されます。