Réponse canonique
En ce qui concerne rdiff le message, librsync 2.0.1
est une bonne lecture pour la clarification des fonctionnalités de la commande, j'ai donc référencé cela ci-dessous pour conserver le contenu de cette réponse si rien d'autre.
Il est important d'essayer de bien comprendre les trois étapes de rdiff pour mettre à jour un fichier: signature , delta et patch, comme indiqué sur la page de manuel rdiff . J'ai également trouvé un rdiff
exemple de script de commande sur GitHub qui est utile que je vais référencer et citer.
Essentiellement...
- Avec un fichier de départ ou de base [
file1
] et vous créez un fichier de signature à partir de celui-ci
- C'est généralement beaucoup plus petit que le fichier de base / original lui-même
- Avec le fichier de signature, vous le comparez à un autre fichier [
file2
] similaire à votre fichier de base mais différent ( par exemple récemment mis à jour ) et créez un fichier delta contenant uniquement les différences entre les deux fichiers
- Utilisez le fichier "différences uniquement" ou delta et comparez-le avec votre fichier de base [
file1
] pour générer un nouveau fichier contenant les modifications de l'autre fichier [ file2
] correspondant aux deux.
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 est un programme pour calculer et appliquer des deltas de réseau. Un delta rdiff est un delta entre des fichiers binaires, décrivant comment un fichier de base (ou ancien) peut être automatiquement modifié pour produire un fichier de résultat (ou nouveau).
Contrairement à la plupart des programmes diff, librsync n'a pas besoin d'accéder aux deux fichiers lorsque le diff est calculé. Le calcul d'un delta ne nécessite qu'une courte "signature" de l'ancien fichier et le contenu complet du nouveau fichier. La signature contient des sommes de contrôle pour les blocs de l'ancien fichier. À l'aide de ces sommes de contrôle, rdiff trouve les blocs correspondants dans le nouveau fichier, puis calcule le delta.
Les deltas rdiff sont généralement moins compacts et aussi plus lents à produire que les xdeltas ou les différences de texte standard. S'il est possible d'avoir à la fois l'ancien et le nouveau fichier présents lors du calcul du delta, xdelta produira généralement un fichier beaucoup plus petit. Si les fichiers comparés sont en texte brut, alors GNU diff est généralement un meilleur choix, car les différences peuvent être vues par les humains et appliquées comme des correspondances inexactes.
rdiff prend tout son sens lorsqu'il n'est pas pratique d'avoir les deux fichiers présents en même temps. Un exemple de cela est que les deux fichiers se trouvent sur des machines distinctes et que vous souhaitez transférer uniquement les différences. Un autre exemple est lorsque l'un des fichiers a été déplacé vers un support d'archivage ou de sauvegarde, ne laissant que sa signature.
Symboliquement
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
Utiliser des modèles
Une application typique de l'algorithme rsync consiste à transférer un fichier A2 d'une machine A vers une machine B qui a un fichier similaire A1. Cela peut être fait comme suit:
- B génère la signature rdiff de A1. Appelez cela S1. B envoie la signature à A. (La signature est généralement beaucoup plus petite que le fichier qu'elle décrit.)
- A calcule le delta rdiff entre S1 et A2. Appelez ce delta D. A envoie le delta à B.
- B applique le delta pour recréer A2. Dans les cas où A1 et A2 contiennent des séquences d'octets identiques, rdiff devrait permettre un gain d'espace important.
la source