Bash: substitute some bytes in a binary file
Question
I have a binary file zero.bin which contains 10 bytes of 0x00, and a data file data.bin which contains 5 bytes of 0x01. I want to substitute the first 5 bytes of the zero.bin with data.bin. I have tried
dd if=data.bin of=zero.bin bs=1 count=5
but, the zero.bin is truncated, finally it becomes 5 bytes of 0x01. I want to keep the tailing 5 bytes of 0x00.
La solution
No problem, just add conv=notrunc
:
dd if=data.bin of=zero.bin bs=1 count=5 conv=notrunc
Autres conseils
You have half of the solution; do that into a temporary file tmp.bin
instead of zero.bin
, then
dd if=zero.bin bs=1 seek=5 skip=5 of=tmp.bin
mv zero.bin old.bin # paranoia
mv tmp.bin zero.bin
Don't get stuck on using dd(1). There are other tools, eg:
(cat data.bin && tail -c +5 zero.bin) > updated.bin
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow