Existe um bdiff(1)
comando no Solaris, que permite diff(1)
arquivos com tamanho maior que o tamanho da RAM ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).
Existe algo parecido no Linux? Eu tentei pesquisar no Google, mas não encontro qual pacote possui bdiff
no Ubuntu.
Respostas:
O bdiff parece estar disponível no Linux (pelo menos como parte do Heirloom Toolchest ).
diff
Eu provavelmente usaria apenas diff antigo regular com essa opção no entanto:
Por que não funciona?
Veja o comentário de @EvanTeitelman,
--speed-large-files
não afeta o modo como os arquivos são carregados na memória.Pode ser demonstrado / confirmado que não funciona usando o seguinte comando:
bsdiff
Difícil de confirmar isso, mas encontrei uma ferramenta chamada da
bsdiff
qual derivabdiff
. Eu confirmei que esta ferramenta está no Ubuntu, simplesmenteapt-get install bsdiff
.Por que isso pode funcionar?
Mais uma vez, obrigado @EvanTeitelman nos comentários, o
bsdiff
acima é uma ferramenta diff para arquivos binários.bsdiff
é uma ferramenta diff binária e pode lidar com arquivos grandes. Não está claro o tamanho. Consulte os seguintes links para um tópico que discute seu uso.rdiff
Eu acho que você também pode usar o rdiff para fazer isso também. Rdiff é capaz de lidar com arquivos muito grandes.
Crie uma assinatura de um arquivo:
Use o arquivo de assinatura gerado sigs.txt e o outro arquivo grande B para criar o delta:
O Delta contém todas as informações necessárias para recriar o arquivo B quando você possui apenas A e o arquivo delta deltaAB.txt.
Para recriar B, execute:
Por que isso funciona?
Eu encontrei este post no blog intitulado: Uma diferença melhor ou o que fazer quando a diferença GNU fica sem memória ("diff: memória esgotada") , que relata que um riff de arquivos de 4,5 GB consumia apenas ~ 66 MB de RAM.
lfhex
O lfhex é um aplicativo para visualizar e editar arquivos em texto hexadecimal, octal, binário ou ascii. A principal força do lfhex é sua capacidade de trabalhar com arquivos muito maiores que a memória do sistema. É uma ferramenta GUI no entanto.
captura de tela
Referências
fonte
-H
como sinônimo--speed-large-files
.bsdiff
é uma ferramenta diff binária, não uma ferramenta diff de arquivo grande.--speed-large-files
sinalizador não afeta a maneira pela qual o GNU diff carrega arquivos na memória. Tente executarfallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testb
para confirmar isso. (Ou dê uma olhada no código fonte.) #bdiff
a partir da herança Toolchest depois de substituir/sbin/sh
por/bin/sh
nos makefiles. Agora, quando tento executá-lo no lugar, entendobdiff: Can not execute '/usr/5bin/diff'
. Desculpe, não quero instalar nada no/usr/5bin/
. Esta não é uma solução viável. As outras opções mencionadas aqui não funcionam para mim porque quero observar as diferenças como texto.lfhex -c file1 file2
funciona bem para mim depois de definir o modo de exibição -> base de edição -> ASCII para os dois painéis.