Estou recebendo um diff: memory exhausted
erro ao tentar diferenciar dois arquivos de 27 GB que são amplamente semelhantes em uma caixa Linux com CentOS 5 e 4 GB de RAM. Este é um problema conhecido, ao que parece.
Eu esperava que houvesse uma alternativa para um utilitário tão essencial, mas não consigo encontrar um. Eu imagino que a solução precisaria usar arquivos temporários em vez de memória para armazenar as informações necessárias.
- Tentei usar
rdiff
exdelta
, mas eles são melhores para mostrar as alterações entre dois arquivos, como um patch, e não são úteis para inspecionar as diferenças entre dois arquivos. - Tentei o VBinDiff , mas é uma ferramenta visual que é melhor para comparar arquivos binários. Eu preciso de algo que possa canalizar as diferenças para STDOUT como regular
diff
. - Existem muitos outros utilitários, como esse,
vimdiff
que funcionam apenas com arquivos menores. - Também li sobre o Solaris,
bdiff
mas não consegui encontrar uma porta para Linux.
Alguma idéia além de dividir o arquivo em pedaços menores? Eu tenho 40 desses arquivos, tentando evitar o trabalho de desmembrá-los.
Respostas:
cmp
faz coisas byte a byte, então provavelmente não ficará sem memória (apenas testei em dois arquivos de 7 GB) - mas você pode estar procurando mais detalhes do que uma lista de "arquivos X e Y diferem em byte x , linha y ". Se as semelhanças dos seus arquivos forem deslocadas (por exemplo, o arquivo Y tiver um bloco de texto idêntico, mas não no mesmo local), você poderá passar compensações paracmp
; você provavelmente poderia transformá-lo em uma comparação ressincronizada com um pequeno script.Além disso: caso mais alguém chegue aqui ao procurar uma maneira de confirmar que duas estruturas de diretório (contendo arquivos muito grandes) são idênticas:
diff --recursive --brief
(oudiff -r -q
abreviado, ou talvez atédiff -rq
) funcionará e não ficará sem memória.fonte
Eu encontrei este link
Não sei se você tentou essas duas opções ou se elas podem funcionar para você. Boa sorte.
fonte
diff -H
é um alias indocumentado e obsoleto paradiff --speed-large-files
.Se os arquivos forem idênticos (mesmo comprimento), exceto por alguns valores de bytes, você poderá usar um script como o seguinte (
w
é o número de bytes por linha do hexdump, ajuste a largura da tela):Não é muito rápido, mas faz o trabalho.
fonte