You can easily diff
the output of commands instead of files. In this case hexdump
prints thousands of lines, but I’m only interested in the difference:
# diff <(hexdump file1.bin) <(hexdump file2.bin)
1,2c1,2
< 0000000 6a49 b610 0000 0000 5733 7261 4465 4243
< 0000010 0000 0000 0001 0000 9006 4e0b 0b28 000f
---
> 0000000 6a49 b616 0000 0000 5733 7261 4465 4243
> 0000010 0000 0000 0001 0000 9006 4e11 0b28 000f
Run the hexdump
in subshell using parenthesis, then redirect the output back to diff
. I’m only interested in the 2 pieces that are different for each binary file:
# for i in `ls *.bin | sort -nk1.7`; do echo -n "$i: "; hexdump -C $i | grep '33 57 61 72 65 44\|4e 28 0b 0f 00' | awk '{if(NR==1) print $4;if(NR==2) print $12}' | paste - -; done | column -t 2>/dev/null
file0.bin: 1a 15
file1.bin: 19 14
file2.bin: 18 13
file3.bin: 17 12
file4.bin: 16 11
file5.bin: 15 10
file6.bin: 14 0f
file8.bin: 12 0d
file9.bin: 11 0c
file10.bin: 10 0b
file12.bin: 0e 09
file13.bin: 0d 08
file14.bin: 0f 0a
file15.bin: 0b 06
file16.bin: 0a 05
file17.bin: 09 04
file18.bin: 08 03
file19.bin: 07 02
file20.bin: 06 01
file21.bin: 05 00
file22.bin: 0c 07