Existe-t-il bdiff (1) sous Linux?

9

Il existe une bdiff(1)commande dans Solaris, qui vous permet de diff(1)créer des fichiers dont la taille est supérieure à la taille de votre RAM ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Y a-t-il quelque chose comme ça sous Linux? J'ai essayé de googler mais je ne trouve pas quel paquet a bdiffdans Ubuntu.

AntonioK
la source

Réponses:

13

bdiff semble être disponible sur Linux (au moins dans le cadre de Heirloom Toolchest ).

diff

J'utiliserais probablement juste un vieux diff régulier avec ce commutateur cependant:

diff --speed-large-files bigfileA bigfileB

Pourquoi ça ne marche pas?

Voir le commentaire de @EvanTeitelman, --speed-large-filesn'affecte pas la façon dont les fichiers sont chargés en mémoire.

Peut être démontré / confirmé pour ne pas fonctionner en utilisant la commande suivante:

fallocate -l 10G testa; fallocate -l 10G testb && \
        diff --speed-large-files -a testa testb

bsdiff

Difficile à confirmer, mais j'ai trouvé un outil appelé bsdiffqui dérive de bdiff. J'ai confirmé que cet outil est dans Ubuntu, simplement apt-get install bsdiff.

Pourquoi ça pourrait marcher?

Encore merci à @EvanTeitelman dans les commentaires, ce qui bsdiffprécède est un outil de diff pour les fichiers binaires. bsdiffest un outil de comparaison binaire et peut traiter des fichiers volumineux. On ne sait pas exactement quelle taille. Voir les liens suivants vers un fil qui explique son utilisation.

rdiff

Je pense que vous pouvez également utiliser rdiff pour le faire également. Rdiff est capable de gérer de très gros fichiers.

  1. Créez une signature d'un fichier:

    rdiff signature A sigs.txt
    
  2. Utilisez le fichier de signature généré sigs.txt et l'autre gros fichier B pour créer le delta:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta contient toutes les informations dont vous avez besoin pour recréer le fichier B lorsque vous avez juste A et le fichier delta deltaAB.txt.

    Pour recréer B, exécutez:

    rdiff patch A deltaAB.txt B
    

Pourquoi ça marche?

J'ai trouvé ce billet de blog intitulé: Un meilleur diff ou ce qu'il faut faire lorsque diff diff GNU manque de mémoire ("diff: mémoire épuisée") , qui signale qu'un rdiff de fichiers de 4,5 Go ne consomme que ~ 66 Mo de RAM.

lfhex

lfhex est une application pour visualiser et éditer des fichiers en texte hexadécimal, octal, binaire ou ascii. La principale force de lfhex est sa capacité à travailler avec des fichiers beaucoup plus volumineux que la mémoire système. C'est un outil GUI cependant.

capture d'écran

                  ls de lfhex]! [ss de lfhex

Références

slm
la source
Bien que cela ne soit pas toujours documenté, GNU diff vous permet de l'utiliser -Hcomme synonyme de --speed-large-files.
2
bsdiffest un outil de comparaison binaire, pas un outil de comparaison de fichiers volumineux.
3
Malheureusement, il semble que l' --speed-large-filesindicateur n'affecte pas la manière dont GNU diff charge les fichiers en mémoire. Essayez de l'exécuter fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbpour le confirmer. (Ou jetez un œil au code source.)
2
J'ai réussi à construire à bdiffpartir du Heirloom Toolchest après avoir remplacé /sbin/shpar /bin/shdans les Makefile. Maintenant, quand j'essaie de l'exécuter en place, je comprends bdiff: Can not execute '/usr/5bin/diff'. Désolé, je ne veux rien installer sur /usr/5bin/. Ce n'est pas une solution viable. Les autres options mentionnées ici ne fonctionnent pas pour moi parce que je veux observer les différences sous forme de texte.
Christian Pietsch
1
PS: Étonnamment, cela lfhex -c file1 file2fonctionne bien pour moi après avoir défini Affichage -> Base d'édition -> ASCII pour les deux volets.
Christian Pietsch