Risposta canonica
Per quanto riguarda rdiff il post, librsync 2.0.1
è una buona lettura per il chiarimento della funzionalità del comando, quindi ho fatto riferimento di seguito per preservare il contenuto di questa risposta se non altro.
È importante provare a comprendere bene rdiff in tre passaggi per l'aggiornamento di un file: firma , delta e patch, come indicato nella pagina man di rdiff . Ho anche trovato utile uno rdiff
script di esempio di comando su GitHub che farò riferimento e citerò.
Essenzialmente...
- Con un "avvio" o file di base [
file1
] e si crea un file di firma da esso
- Questo di solito è molto più piccolo del file base / originale stesso
- Con il file della firma lo confronti con un altro file [
file2
] simile al file di base ma diverso ( ad es. Aggiornato di recente ) e si crea un file delta contenente solo le differenze tra i due file
- Utilizzare il "solo differenze" o il file delta e confrontarlo con il file di base [
file1
] per generare un nuovo file contenente le modifiche dall'altro file [ file2
] corrispondenti ai due.
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 è un programma per calcolare e applicare delta di rete. Un delta rdiff è un delta tra i file binari, che descrive come un file base (o vecchio) può essere modificato automaticamente per produrre un file risultato (o nuovo).
A differenza della maggior parte dei programmi diff, librsync non richiede l'accesso ad entrambi i file quando viene calcolato il diff. Il calcolo di un delta richiede solo una breve "firma" del vecchio file e il contenuto completo del nuovo file. La firma contiene checksum per i blocchi del vecchio file. Usando questi checksum, rdiff trova i blocchi corrispondenti nel nuovo file e quindi calcola il delta.
I delta rdiff sono generalmente meno compatti e anche più lenti da produrre rispetto a xdeltas o diff diff di testo. Se è possibile avere sia il vecchio che il nuovo file presenti quando si calcola il delta, xdelta generalmente produrrà un file molto più piccolo. Se i file confrontati sono in chiaro, allora GNU diff è di solito una scelta migliore, poiché i diff possono essere visualizzati dagli umani e applicati come corrispondenze inesatte.
rdiff si presenta da solo quando non è conveniente avere entrambi i file presenti contemporaneamente. Un esempio di ciò è che i due file si trovano su macchine separate e si desidera trasferire solo le differenze. Un altro esempio è quando uno dei file è stato spostato nel supporto di archiviazione o di backup, lasciando solo la sua firma.
simbolicamente
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
Usa schemi
Un'applicazione tipica dell'algoritmo rsync è quella di trasferire un file A2 da una macchina A a una macchina B che ha un file simile A1. Questo può essere fatto come segue:
- B genera la firma rdiff di A1. Chiama questo S1. B invia la firma ad A. (La firma è di solito molto più piccola del file che descrive.)
- A calcola il delta rdiff tra S1 e A2. Chiamare questo delta D. A invia il delta a B.
- B applica il delta per ricreare A2. Nei casi in cui A1 e A2 contengano esecuzioni di byte identici, rdiff dovrebbe offrire un notevole risparmio di spazio.
fonte