Como duas pessoas já votaram para encerrar este post, tentarei deixar a questão o mais clara possível. Um arquivo em um dispositivo físico é representado como uma sequência binária. Dito isto, o que preciso fazer é verificar as diferenças entre as representações de dois arquivos em tal nível (ou seja, preciso comparar as diferenças entre vários bytes na mesma posição em dois arquivos diferentes) e gerar tais diferenças em um bash
roteiro.
Exemplo:
file1: 00000000 01010101 10101010 11001100 00110011
file2: 00000000 01010101 01010101 00110011 00110011
O script deve gerar:
differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)
Ou algo nesse sentido.
Portanto, a primeira coisa que preciso fazer para conseguir isso é pelo menos poder abrir um arquivo em uma determinada posição e ler um byte e gerar/armazenar esse byte. Eu poderia escrever um C
programa para fazer isso, masexiste uma maneira de fazer isso dentrobash
?
Responder1
Podes tentar cmp
. Ele comparará dois arquivos byte por byte.
Deman cmp
:
cmp - compare two files byte by byte
Embora o número de linhas deva ser igual em dois arquivos. Observe também que cmp
apontará apenas para a primeira diferença; para apontar para as próximas diferenças, você pode pular bytes específicos desde o início.
$ cat foo
this is
a test
$ cat bar
this
is a test
$ cmp foo bar
foo bar differ: byte 5, line 1
$ cmp -b foo bar
foo bar differ: byte 5, line 1 is 40 12 ^J
Para imprimir os diferentes valores de bytes cmp -l
, use, from man cmp
:
-l, --verbose
output byte numbers and differing byte values
Responder2
Você pode tentar com vimdiff
:
vimdiff -b file1 file2