Odpowiedź kanoniczna
Jeśli chodzi o rdiff post, librsync 2.0.1
to dobra lektura dla wyjaśnienia funkcji komend, więc wspomniałem o tym poniżej, aby zachować treść tej odpowiedzi, jeśli nic więcej.
Ważne jest, aby postarać się dobrze zrozumieć trzy etapy aktualizacji pliku rdiff : podpis , delta i łatka, o czym mówiono na stronie podręcznika rdiff . Znalazłem również rdiff
przykładowy skrypt polecenia na GitHub, który jest pomocny, do którego odwołam się i zacytuję.
Głównie...
- Za pomocą pliku „startowego” lub podstawowego [
file1
] tworzysz z niego
plik podpisu
- Jest to zwykle znacznie mniejszy niż sam plik podstawowy / oryginalny
- Za pomocą pliku podpisu porównujesz go z innym plikiem [
file2
] podobnym do pliku podstawowego, ale innym ( np. Niedawno zaktualizowanym ) i tworzysz plik delta zawierający tylko różnice między dwoma plikami
- Użyj pliku „tylko różnice” lub pliku delta i porównaj go z plikiem podstawowym [
file1
], aby wygenerować nowy plik zawierający zmiany z drugiego pliku [ file2
] pasujące do obu.
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 to program do obliczania i stosowania delt sieciowych. Delta rdiff to delta między plikami binarnymi, opisująca sposób automatycznej edycji pliku podstawowego (lub starego) w celu utworzenia pliku wynikowego (lub nowego).
W przeciwieństwie do większości programów diff, librsync nie wymaga dostępu do obu plików podczas obliczania diff. Obliczenie delty wymaga tylko krótkiej „sygnatury” starego pliku i pełnej zawartości nowego pliku. Podpis zawiera sumy kontrolne dla bloków starego pliku. Korzystając z tych sum kontrolnych, rdiff znajduje pasujące bloki w nowym pliku, a następnie oblicza różnicę.
delty rdiff są zwykle mniej zwarte i wolniejsze w produkcji niż xdeltas lub zwykłe różnice tekstowe. Jeśli możliwe jest obecność zarówno starych, jak i nowych plików podczas obliczania delty, xdelta generuje ogólnie znacznie mniejszy plik. Jeśli porównywane pliki to zwykły tekst, to GNU diff jest zwykle lepszym wyborem, ponieważ różnice mogą być przeglądane przez ludzi i stosowane jako niedokładne dopasowania.
rdiff sprawdza się, gdy oba pliki nie są wygodne w tym samym czasie. Jednym z przykładów jest to, że dwa pliki znajdują się na osobnych komputerach i chcesz przenieść tylko różnice. Innym przykładem jest przeniesienie jednego z plików do nośnika archiwum lub kopii zapasowej, pozostawiając tylko jego podpis.
Symbolicznie
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
Użyj wzorów
Typowym zastosowaniem algorytmu rsync jest przesłanie pliku A2 z komputera A na komputer B, który ma podobny plik A1. Można to zrobić w następujący sposób:
- B generuje sygnaturę rdiff dla A1. Nazwij to S1. B wysyła podpis do A. (Podpis jest zwykle znacznie mniejszy niż plik, który opisuje).
- A oblicza deltę rdiff między S1 i A2. Nazwij tę deltę D. A wysyła deltę do B.
- B stosuje deltę do odtworzenia A2. W przypadkach, w których A1 i A2 zawierają ciągi identycznych bajtów, rdiff powinien zapewnić znaczną oszczędność miejsca.
źródło