正解
投稿のrdiffに関しては、librsync 2.0.1
はコマンド機能の明確化のための優れた資料であるため、他に何もない場合にこの回答の内容を保持するために以下を参照しました。
rdiffの manページで説明されているように、ファイルを更新するためのrdiffの3つのステップ(署名、デルタ、パッチ)をよく理解することは重要です。また、GitHubで、参考にして引用するのに役立つコマンドのサンプルスクリプトを見つけました。rdiff
本質的に...
- 「開始」または基本ファイル[
file1
]を使用して、そこから
署名ファイルを作成する
- これは通常、ベース/元のファイル自体よりもはるかに小さい
- 署名ファイル、あなたは別のファイル[に対してそれを比較し
file2
、あなたのベースファイルに似ていますが、異なる(例えば最近更新)および作成デルタファイル 2つのファイル間だけ違いを含むを
- 「差分のみ」または差分ファイルを使用し、ベースファイル[
file1
] と比較してfile2
、2つに一致する他のファイル[ ] からの変更を含む新しいファイルを生成します。
rdiff signature file1 signature-file ## signature base file1
rdiff delta signature-file file2 delta-file ## delta differences file2
rdiff patch file1 delta-file gen-file ## compare delta to file1 to create matching file2
rdiff-example.sh
# $ rdiff --help
# Usage: rdiff [OPTIONS] signature [BASIS [SIGNATURE]]
# [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]
# [OPTIONS] patch BASIS [DELTA [NEWFILE]]
# Options:
# -v, --verbose Trace internal processing
# -V, --version Show program version
# -?, --help Show this help message
# -s, --statistics Show performance statistics
# Delta-encoding options:
# -b, --block-size=BYTES Signature block size
# -S, --sum-size=BYTES Set signature strength
# --paranoia Verify all rolling checksums
# IO options:
# -I, --input-size=BYTES Input buffer size
# -O, --output-size=BYTES Output buffer size
# create signature for old file
rdiff signature old-file signature-file
# create delta using signature file and new file
rdiff delta signature-file new-file delta-file
# generate new file using old file and delta
rdiff patch old-file delta-file gen-file
# test
diff -s gen-file new-file
# Files gen-file and new-file are identical
rdiffは、ネットワークデルタを計算して適用するプログラムです。rdiffデルタはバイナリファイル間のデルタであり、基本(または古い)ファイルを自動的に編集して結果(または新しい)ファイルを生成する方法を記述します。
ほとんどのdiffプログラムとは異なり、diffの計算時にlibrsyncは両方のファイルへのアクセスを必要としません。デルタを計算するには、古いファイルの短い「署名」と新しいファイルの完全な内容が必要です。署名には、古いファイルのブロックのチェックサムが含まれています。これらのチェックサムを使用して、rdiffは新しいファイルで一致するブロックを見つけて、デルタを計算します。
rdiffデルタは通常、xdeltaや通常のテキストdiffよりもコンパクトでなく、生成に時間がかかります。デルタの計算時に古いファイルと新しいファイルの両方が存在する可能性がある場合、xdeltaは通常、はるかに小さいファイルを生成します。比較対象のファイルがプレーンテキストの場合、人間がdiffを表示して不正確な一致として適用できるため、通常はGNU diffの方が適しています。
rdiffは、両方のファイルを同時に存在させることが不都合な場合に役立ちます。この1つの例は、2つのファイルが別々のマシンにあり、違いのみを転送したい場合です。別の例は、ファイルの1つがアーカイブまたはバックアップメディアに移動され、その署名のみが残っている場合です。
象徴的に
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
パターンを使用する
rsyncアルゴリズムの一般的なアプリケーションは、ファイルA2をマシンAから、同様のファイルA1を持つマシンBに転送することです。これは次のように実行できます。
- BはA1のrdiff署名を生成します。これをS1と呼びます。BはAに署名を送信します(通常、署名はそれが説明するファイルよりもはるかに小さくなります)。
- Aは、S1とA2の間のrdiffデルタを計算します。このデルタをDと呼びます。AがデルタをBに送信します。
- Bはデルタを適用してA2を再作成します。A1とA2に同じバイトのランが含まれている場合、rdiffは大幅なスペース節約を提供します。
ソース