Desejo poder compactar um arquivo sem perdas e, se o arquivo original for idêntico ao arquivo de outro usuário, desejo que os dois arquivos compactados correspondam, mesmo que as datas do arquivo original sejam diferentes .
Quero usar no máximo 1 GB de RAM durante a compactação. Estou inclinado a um algoritmo assimétrico, porque os arquivos que tenho são bastante grandes e demoram pelo menos uma hora para compactar com o LZMA1 "ultra" em 7-zip em uma máquina P4 com 1 GB de RAM e mais nada em execução. Eu acho que 7-zip e FreeARC podem ser usados para meus propósitos. Tentei encontrar os comandos que deveria estar usando, mas não estou tendo muita sorte.
edit : arquivos 100% idênticos devem ser produzidos, mesmo que as datas de criação sejam diferentes. Isso deve ser possível através de --nodates no Freearc e com ???? em 7 zip. Estou procurando um comando equivalente para 7-zip e uma maneira de padronizar a compactação em vários computadores.
fonte
Respostas:
Crie alguns arquivos idênticos:
gzip eles ...
observe o campo timestamp como a única diferença:
Para mais informações sobre o registro de data e hora, consulte o RFC
Agora, você pode pegar um MD5 que inicia após o byte 8, zerar esses quatro bytes em seus arquivos e perder seus carimbos de data / hora ou extrair o CRC16 desses gzips (consulte também a RFC para obter informações sobre como extrair isso)
Ou você pode salvar sem o carimbo de data e hora:
fonte
gzip
estiver disponível para Windows, o Cygwin a fornecerá.Não é uma resposta direta à sua pergunta, mas pode ser útil de qualquer maneira.
Há muito tempo (um milênio diferente) eu tive o mesmo problema. Queríamos saber se os arquivos compactados eram iguais, sem descompactá-los e compará-los.
Nossa solução foi obter uma md5sum do arquivo antes de compactá-lo, compactamos o arquivo e o renomeamos para
md5sum.zip
(.zip ou .tar.gz ou .rar ou .whatever) . Dessa forma, sabíamos que, se dois arquivos tivessem o mesmo nome (sem sufixo), eles eram idênticos.fonte
O pristine-tar possui uma versão hackeada do gzip que sempre produz os mesmos resultados (e outra para o bzip2). Escolha uma variante do algoritmo e um carimbo de data e hora e pronto.
fonte
Entre nas fontes do 7-zip. Onde lê a data do arquivo, basta inserir o código para alterar a data para 01.01.1997, ou qualquer outra coisa - corrigida para todos os arquivos. Compile com um nome diferente e use-o.
fonte