Recibo un diff: memory exhausted
error al intentar diferenciar dos archivos de 27 GB que son muy similares en una caja Linux con CentOS 5 y 4 GB de RAM. Este es un problema conocido, parece.
Esperaría que hubiera una alternativa para una utilidad tan esencial, pero no puedo encontrarla. Me imagino que la solución tendría que usar archivos temporales en lugar de memoria para almacenar la información que necesita.
- Traté de usar
rdiff
yxdelta
, pero son mejores para mostrar los cambios entre dos archivos, como un parche, y no son tan útiles para inspeccionar las diferencias entre dos archivos. - Intentado VBinDiff , pero es una herramienta visual que es mejor para comparar archivos binarios. Necesito algo que pueda canalizar las diferencias a STDOUT como de costumbre
diff
. - Hay muchas otras utilidades como
vimdiff
que solo funcionan con archivos más pequeños. - También leí sobre Solaris
bdiff
pero no pude encontrar un puerto para Linux.
¿Alguna idea además de dividir el archivo en piezas más pequeñas? Tengo 40 de estos archivos, así que trato de evitar el trabajo de dividirlos.
Respuestas:
cmp
hace las cosas byte a byte, por lo que probablemente no se quede sin memoria (solo lo probé en dos archivos de 7 GB), pero es posible que esté buscando más detalles que una lista de "archivos X e Y que difieren en byte x , línea y ". Si las similitudes de sus archivos están desplazadas (p. Ej., El archivo Y tiene un bloque de texto idéntico, pero no en la misma ubicación), puede pasar compensaciones acmp
; probablemente podría convertirlo en una comparación de resincronización con un script pequeño.Aparte: en caso de que alguien más aterrice aquí cuando busque una manera de confirmar que dos estructuras de directorio (que contienen archivos muy grandes) son idénticas:
diff --recursive --brief
(odiff -r -q
para abreviar, o tal vez inclusodiff -rq
) funcionarán y no se quedarán sin memoria.fuente
Encontré este enlace
No estoy seguro si probaste esas dos opciones o si podrían funcionar para ti. Buena suerte.
fuente
diff -H
es un alias indocumentado y en desuso paradiff --speed-large-files
.Si los archivos son idénticos (la misma longitud) excepto por unos pocos valores de bytes, puede usar un script como el siguiente (
w
es el número de bytes por línea a hexdump, ajústelo al ancho de su pantalla):No es muy rápido, pero hace el trabajo.
fuente