Hay un bdiff(1)
comando en Solaris, que le permite diff(1)
archivos con un tamaño mayor que el tamaño de su RAM ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).
¿Hay algo así en Linux? Intenté buscar en Google pero no encuentro qué paquete tiene bdiff
Ubuntu.
Respuestas:
Parece que bdiff está disponible en Linux (al menos como parte de Heirloom Toolchest ).
diff
Sin embargo, probablemente solo usaría el viejo diff regular con este interruptor:
¿Por qué no funciona?
Ver comentario de @EvanTeitelman,
--speed-large-files
no afecta cómo se cargan los archivos en la memoria.Se puede demostrar / confirmar que no funciona con el siguiente comando:
bsdiff
Difícil de confirmar esto, pero encontré una herramienta llamada
bsdiff
que se deriva debdiff
. He confirmado que esta herramienta está en Ubuntu, simplementeapt-get install bsdiff
.¿Por qué podría funcionar?
Nuevamente, gracias a @EvanTeitelman en los comentarios, lo
bsdiff
anterior es una herramienta de diferencias para archivos binarios.bsdiff
es una herramienta de diferencia binaria y puede manejar archivos grandes. No está claro qué tan grande. Vea los siguientes enlaces a un hilo que discuten su uso.rdiff
Creo que también podrías usar rdiff para hacer esto. Rdiff es capaz de manejar archivos muy grandes.
Crea una firma de un archivo:
Utilice el archivo de firma generado sigs.txt y el otro archivo grande B para crear el delta:
Delta contiene toda la información que necesita para volver a crear el archivo B cuando solo tiene A y el archivo delta deltaAB.txt.
Para recrear B, ejecute:
Por que funciona
Encontré esta publicación del blog titulada: Una mejor diferencia o qué hacer cuando GNU diff se queda sin memoria ("diff: memoria agotada") , que informa que un rdiff de archivos de 4.5GB solo consumió ~ 66MB de RAM.
Iffex
lfhex es una aplicación para ver y editar archivos en texto hexadecimal, octal, binario o ascii. La principal fortaleza de lfhex es su capacidad para trabajar con archivos mucho más grandes que la memoria del sistema. Sin embargo, es una herramienta GUI.
captura de pantalla
Referencias
fuente
-H
como sinónimo de--speed-large-files
.bsdiff
es una herramienta diff binaria, no una herramienta diff de archivos grandes.--speed-large-files
bandera no afecta la manera en que GNU diff carga los archivos en la memoria. Intenta correrfallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testb
para confirmar esto. (O eche un vistazo al código fuente)bdiff
a partir de la herencia Toolchest después de sustituir/sbin/sh
por/bin/sh
en los Makefile. Ahora, cuando trato de ejecutarlo en su lugar, me salebdiff: Can not execute '/usr/5bin/diff'
. Lo siento, no quiero instalar nada/usr/5bin/
. Esta no es una solución viable. Las otras opciones mencionadas aquí no funcionan para mí porque quiero observar las diferencias como texto.lfhex -c file1 file2
funciona bien para mí después de configurar Ver -> Editar base -> ASCII para ambos paneles.