¿Hay bdiff (1) en Linux?


9

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 bdiffUbuntu.



Respuestas:


13

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:

diff --speed-large-files bigfileA bigfileB

¿Por qué no funciona?

Ver comentario de @EvanTeitelman, --speed-large-filesno afecta cómo se cargan los archivos en la memoria.

Se puede demostrar / confirmar que no funciona con el siguiente comando:

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

bsdiff

Difícil de confirmar esto, pero encontré una herramienta llamada bsdiffque se deriva de bdiff. He confirmado que esta herramienta está en Ubuntu, simplemente apt-get install bsdiff.

¿Por qué podría funcionar?

Nuevamente, gracias a @EvanTeitelman en los comentarios, lo bsdiffanterior es una herramienta de diferencias para archivos binarios. bsdiffes 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.

  1. Crea una firma de un archivo:

    rdiff signature A sigs.txt
    
  2. Utilice el archivo de firma generado sigs.txt y el otro archivo grande B para crear el delta:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. 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:

    rdiff patch A deltaAB.txt B
    

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

                  ss of lfhex] [ss of lfhex

Referencias


Aunque esto no siempre está documentado, GNU diff le permite usarlo -Hcomo sinónimo de --speed-large-files.

2
bsdiffes una herramienta diff binaria, no una herramienta diff de archivos grandes.

3
Desafortunadamente, parece que la --speed-large-filesbandera no afecta la manera en que GNU diff carga los archivos en la memoria. Intenta correr fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbpara confirmar esto. (O eche un vistazo al código fuente)

2
Me las arreglé para construir bdiffa partir de la herencia Toolchest después de sustituir /sbin/shpor /bin/shen los Makefile. Ahora, cuando trato de ejecutarlo en su lugar, me sale bdiff: 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.
Christian Pietsch

1
PD: Sorprendentemente, lfhex -c file1 file2funciona bien para mí después de configurar Ver -> Editar base -> ASCII para ambos paneles.
Christian Pietsch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.