Réponse canonique
Concernant rdiff le poste, librsync 2.0.1 est une bonne lecture pour la clarification de la fonctionnalité de la commande. Je l'ai donc référencé ci-dessous pour préserver le contenu de cette réponse, si rien d'autre.
Il est important d'essayer d'avoir une bonne compréhension de la rdiff trois étapes pour mettre à jour un fichier : signature , delta y patch comme cela a été dit sur le rdiff page de manuel. J'ai également trouvé une rdiff
exemple de commande script sur GitHub qui est utile et 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
- Il 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éer un fichier delta contenant uniquement les différences entre les deux fichiers
- Utilisez les options "différences seulement" ou fichier delta et le comparer avec votre fichier de base [
file1
] pour générer un nouveau fichier contenant les changements de l'autre fichier [ file2
] en faisant correspondre les 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 édité pour produire un fichier résultat (ou nouveau).
Contrairement à la plupart des programmes de diff, librsync n'a pas besoin d'accéder à la fois à fichiers lorsque la différence est calculée. Le calcul d'un delta nécessite juste une courte "signature" de l'ancien fichier et le contenu complet du nouveau fichier. fichier. La signature contient des sommes de contrôle pour les blocs de l'ancien fichier. En utilisant ces sommes de contrôle, rdiff trouve les blocs correspondants dans le nouveau fichier, et calcule ensuite le delta.
Les deltas de rdiff sont généralement moins compacts et aussi plus lents à produire que les deltas de xdeltas ou les diffs en texte normal. S'il est possible d'avoir à la fois l'ancien et le nouveau fichier fichiers présents lors du calcul du delta, xdelta produira généralement un produira généralement un fichier beaucoup plus petit. Si les fichiers à comparer sont en texte brut, alors GNU diff est généralement un meilleur choix, car les différences peuvent être être vues par des humains et appliquées comme des correspondances inexactes.
rdiff est utile lorsqu'il n'est pas pratique d'avoir les deux fichiers en même temps. présents en même temps. Un exemple de ceci est que les deux fichiers sont sur des machines séparées, et vous voulez transférer seulement les différences. Un autre exemple est celui où l'un des fichiers a été déplacé vers un support d'archivage ou de sauvegarde. vers un support d'archives 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 est de transférer un fichier A2 d'une machine A à une machine B qui possède un fichier similaire A1. Ceci peut faire comme suit :
- B génère la signature rdiff de A1. Appelons-la S1. B envoie la signature à A. (La signature est généralement beaucoup plus petite que le fichier qu'elle décrit). qu'elle décrit).
- A calcule le delta de rdiff entre S1 et A2. Il appelle 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éries d'octets identiques, rdiff devrait permettre un gain de place significatif. d'espace.
source