Quiero poder comprimir un archivo sin pérdidas, y si el archivo original es idéntico al archivo de otro usuario, quiero que ambos archivos comprimidos coincidan, incluso si las fechas del archivo original son diferentes .
Quiero usar un máximo de 1 GB de RAM mientras comprimo. Me estoy inclinando hacia un algoritmo asimétrico porque los archivos que tengo son bastante grandes y tardan al menos una hora en comprimirse con LZMA1 "ultra" en 7-zip en una máquina P4 con 1 GB de RAM y nada más en ejecución. Creo que 7-zip y FreeARC pueden usarse para mis propósitos. Intenté encontrar los comandos que debería usar, pero no tengo mucha suerte.
editar : se deben producir archivos 100% idénticos, incluso si las fechas de creación son diferentes. Esto debería ser posible a través de --nodates en Freearc, y con ???? en 7-zip. Estoy buscando un comando equivalente para 7-zip y una forma de estandarizar la compresión en varias computadoras.
fuente
Respuestas:
Crea un par de archivos idénticos:
gzip ellos ...
observe el campo de marca de tiempo como la única diferencia:
Para obtener más información sobre la marca de tiempo, consulte el RFC
Ahora, puede tomar un MD5 que comienza después del byte 8, poner a cero estos cuatro bytes en sus archivos y perder sus marcas de tiempo, o extraer el CRC16 de esos gzips (también vea el RFC para obtener información sobre cómo extraer esto)
O bien, podría guardar sin la marca de tiempo:
fuente
gzip
disponibles para Windows, Cygwin lo proporciona.No es una respuesta directa a su pregunta, pero podría ser de ayuda de todos modos.
Hace mucho tiempo (un milenio diferente) tuve el mismo problema. Queríamos saber si los archivos comprimidos eran los mismos sin descomprimirlos y compararlos.
Nuestra solución fue obtener un md5sum del archivo antes de comprimirlo, luego comprimimos el archivo y le cambiamos el nombre a
md5sum.zip
(.zip o .tar.gz o .rar o .whatever) . De esa manera, sabíamos que si dos archivos tenían el mismo nombre (sin sufijo), serían idénticos.fuente
pristine-tar tiene una versión pirateada de gzip que siempre produce los mismos resultados (y otra para bzip2). Elija una variante de algoritmo y una marca de tiempo y listo.
fuente
Hackea las fuentes de 7-zip. Cuando lea la fecha del archivo, simplemente inserte el código para cambiar la fecha a 01.01.1997, o cualquier otra cosa, corregida para todos los archivos. Compila con un nombre diferente y úsalo.
fuente