Kanonische Antwort
In Bezug auf rdiff the post ist librsync 2.0.1 eine gute Lektüre für die Erläuterung der Befehlsfunktionalität, daher habe ich unten darauf verwiesen, um den Inhalt dieser Antwort beizubehalten
, wenn nichts anderes.
Es ist wichtig zu versuchen, ein gutes Verständnis der drei Schritte zum Aktualisieren einer Datei zu erlangen : Signatur , Delta und Patch, wie auf der rdiff- Manpage beschrieben. Ich habe auch ein rdiff
Befehlsbeispielskript auf GitHub gefunden, das hilfreich ist und auf das ich verweisen und zitieren werde.
Im Wesentlichen...
- Mit einem „Start“ oder Basisdatei [
file1
] und erstellen Sie eine Signaturdatei von ihm
- Dies ist normalerweise viel kleiner als die Basis- / Originaldatei selbst
- Mit der Signaturdatei vergleichen Sie sie mit einer anderen Datei [
file2
], die Ihrer Basisdatei ähnelt, jedoch unterschiedlich ist ( z. B. kürzlich aktualisiert wurde ), und erstellen eine Delta-Datei, die nur die Unterschiede zwischen den beiden Dateien enthält
- Verwenden Sie die Datei "Nur Unterschiede" oder Delta und vergleichen Sie sie mit Ihrer Basisdatei [
file1
], um eine neue Datei zu generieren, die die Änderungen aus der anderen Datei [ file2
] enthält, die mit den beiden übereinstimmen.
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 ist ein Programm zum Berechnen und Anwenden von Netzwerkdeltas. Ein rdiff-Delta ist ein Delta zwischen Binärdateien, das beschreibt, wie eine Basisdatei (oder eine alte Datei) automatisch bearbeitet werden kann, um eine Ergebnisdatei (oder eine neue Datei) zu erstellen.
Im Gegensatz zu den meisten Diff-Programmen erfordert Librsync beim Berechnen des Diff keinen Zugriff auf beide Dateien. Die Berechnung eines Deltas erfordert nur eine kurze "Signatur" der alten Datei und den vollständigen Inhalt der neuen Datei. Die Signatur enthält Prüfsummen für Blöcke der alten Datei. Mit diesen Prüfsummen findet rdiff übereinstimmende Blöcke in der neuen Datei und berechnet dann das Delta.
rdiff-Deltas sind normalerweise weniger kompakt und auch langsamer zu produzieren als xdeltas oder normale Textunterschiede. Wenn bei der Berechnung des Deltas sowohl die alten als auch die neuen Dateien vorhanden sein können, erzeugt xdelta im Allgemeinen eine viel kleinere Datei. Wenn es sich bei den verglichenen Dateien um einfachen Text handelt, ist GNU diff normalerweise die bessere Wahl, da die Unterschiede von Menschen angezeigt und als ungenaue Übereinstimmungen angewendet werden können.
rdiff kommt zur Geltung, wenn es nicht bequem ist, beide Dateien gleichzeitig zu haben. Ein Beispiel hierfür ist, dass sich die beiden Dateien auf separaten Computern befinden und Sie nur die Unterschiede übertragen möchten. Ein anderes Beispiel ist, wenn eine der Dateien auf Archiv- oder Sicherungsmedien verschoben wurde und nur ihre Signatur übrig bleibt.
Symbolisch
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
Verwenden Sie Muster
Eine typische Anwendung des rsync-Algorithmus besteht darin, eine Datei A2 von einer Maschine A auf eine Maschine B zu übertragen, die eine ähnliche Datei A1 aufweist. Dies kann wie folgt erfolgen:
- B erzeugt die rdiff-Signatur von A1. Nennen Sie dies S1. B sendet die Signatur an A. (Die Signatur ist normalerweise viel kleiner als die beschriebene Datei.)
- A berechnet das rdiff-Delta zwischen S1 und A2. Nennen Sie dieses Delta D. A sendet das Delta an B.
- B wendet das Delta an, um A2 neu zu erstellen. In Fällen, in denen A1 und A2 Läufe mit identischen Bytes enthalten, sollte rdiff eine erhebliche Platzersparnis bieten.
Quelle