Resposta canônica
Com relação à rdiff da publicação, o librsync 2.0.1
é uma boa leitura para o esclarecimento da funcionalidade do comando, por isso mencionei isso abaixo para preservar o conteúdo dessa resposta, se nada mais.
É importante tentar entender bem as três etapas do rdiff para atualizar um arquivo: assinatura , delta e patch, conforme mencionado na página do manual do rdiff . Eu também encontrei um rdiff
script de exemplo de comando no GitHub que é útil, que eu vou referenciar e citar.
Essencialmente...
- Com um arquivo "inicial" ou base [
file1
] e você cria um arquivo de assinatura a partir dele
- Geralmente é muito menor que o próprio arquivo base / original
- Com o arquivo de assinatura, você o compara com outro arquivo [
file2
] semelhante ao seu arquivo base, mas diferente ( por exemplo, atualizado recentemente ) e cria um arquivo delta contendo apenas as diferenças entre os dois arquivos
- Use o " delta apenas diferenças" ou o arquivo delta e compare-o com o seu arquivo base [
file1
] para gerar um novo arquivo contendo as alterações do outro arquivo [ file2
] correspondente aos dois.
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
O rdiff é um programa para calcular e aplicar deltas de rede. Um delta rdiff é um delta entre arquivos binários, descrevendo como um arquivo básico (ou antigo) pode ser editado automaticamente para produzir um arquivo de resultado (ou novo).
Diferentemente da maioria dos programas diff, o librsync não requer acesso aos dois arquivos quando o diff é calculado. A computação de um delta requer apenas uma pequena "assinatura" do arquivo antigo e o conteúdo completo do novo arquivo. A assinatura contém somas de verificação para blocos do arquivo antigo. Usando essas somas de verificação, o rdiff encontra os blocos correspondentes no novo arquivo e calcula o delta.
Os deltas do rdiff geralmente são menos compactos e também mais lentos para produzir do que xdeltas ou diferenças de texto regulares. Se for possível ter os arquivos antigos e novos presentes ao calcular o delta, o xdelta geralmente produzirá um arquivo muito menor. Se os arquivos que estão sendo comparados são texto sem formatação, o diff do GNU geralmente é uma escolha melhor, pois os diffs podem ser vistos por humanos e aplicados como correspondências inexatas.
O rdiff se destaca quando não é conveniente ter os dois arquivos presentes ao mesmo tempo. Um exemplo disso é que os dois arquivos estão em máquinas separadas e você deseja transferir apenas as diferenças. Outro exemplo é quando um dos arquivos foi movido para arquivo ou mídia de backup, deixando apenas sua assinatura.
Simbolicamente
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
Use padrões
Uma aplicação típica do algoritmo rsync é transferir um arquivo A2 de uma máquina A para uma máquina B que possui um arquivo semelhante A1. Isso pode ser feito da seguinte forma:
- B gera a assinatura rdiff de A1. Chame isso de S1. B envia a assinatura para A. (A assinatura geralmente é muito menor que o arquivo que descreve.)
- A calcula o delta rdiff entre S1 e A2. Chame esse delta D. A envia o delta para B.
- B aplica o delta para recriar A2. Nos casos em que A1 e A2 contenham execuções de bytes idênticos, o rdiff deve proporcionar uma economia significativa de espaço.
fonte