Je reçois une diff: memory exhausted
erreur lorsque j'essaie de différencier deux fichiers de 27 Go qui sont largement similaires sur une boîte Linux avec CentOS 5 et 4 Go de RAM. Il semble que ce soit un problème connu.
Je m'attendrais à ce qu'il y ait une alternative pour un utilitaire aussi essentiel, mais je n'en trouve pas. J'imagine que la solution devrait utiliser des fichiers temporaires plutôt que de la mémoire pour stocker les informations dont elle a besoin.
- J'ai essayé d'utiliser
rdiff
etxdelta
, mais ils sont meilleurs pour montrer les changements entre deux fichiers, comme un patch, et ne sont pas très utiles pour inspecter les différences entre deux fichiers. - J'ai essayé VBinDiff , mais c'est un outil visuel qui est meilleur pour comparer des fichiers binaires. J'ai besoin de quelque chose qui puisse transmettre les différences à STDOUT comme d'habitude
diff
. - Il existe de nombreux autres utilitaires tels que ceux
vimdiff
qui ne fonctionnent qu'avec des fichiers plus petits. - J'ai également lu sur Solaris
bdiff
mais je n'ai pas pu trouver de port pour Linux.
Des idées en plus de diviser le fichier en plus petits morceaux? J'ai 40 de ces fichiers, donc j'essaie d'éviter de les casser.
Réponses:
cmp
fait les choses octet par octet, donc il ne manquera probablement pas de mémoire (venez de le tester sur deux fichiers de 7 Go) - mais vous cherchez peut-être plus de détails qu'une liste de "fichiers X et Y diffèrent d'un octet x , ligne y ". Si les similitudes de vos fichiers sont décalées (par exemple, le fichier Y a un bloc de texte identique, mais pas au même emplacement), vous pouvez passer des décalages àcmp
; vous pourriez probablement en faire une comparaison de resynchronisation avec un petit script.En plus: Au cas où quelqu'un d'autre atterrirait ici en cherchant un moyen de confirmer que deux structures de répertoires (contenant de très gros fichiers) sont identiques:
diff --recursive --brief
(oudiff -r -q
pour faire court, ou peut-être mêmediff -rq
) fonctionneront et ne manqueront pas de mémoire.la source
J'ai trouvé ce lien
Je ne sais pas si vous avez essayé ces deux options ou si elles pourraient fonctionner pour vous. Bonne chance.
la source
diff -H
est un alias non documenté et obsolète pourdiff --speed-large-files
.Si les fichiers sont identiques (même longueur) à l'exception de quelques valeurs d'octets, vous pouvez utiliser un script comme celui-ci (
w
c'est le nombre d'octets par ligne à hexdump, ajustez à votre largeur d'affichage):Ce n'est pas très rapide, mais fait le travail.
la source