Bash: заменить несколько байтов в двоичном файле
У меня есть двоичный файл zero.bin, который содержит 10 байтов 0x00, и файл данных data.bin, который содержит 5 байтов 0x01. Я хочу заменить первые 5 байтов zero.bin на data.bin. я пытался
dd if=data.bin of=zero.bin bs=1 count=5
но zero.bin усекается, в конце концов он становится 5 байтов 0x01. Я хочу сохранить 5 байтов по 0x00.
3 ответа
Решение
Нет проблем, просто добавьте conv=notrunc
:
dd if=data.bin of=zero.bin bs=1 count=5 conv=notrunc
У вас есть половина решения; сделать это во временный файл tmp.bin
вместо zero.bin
, затем
dd if=zero.bin bs=1 seek=5 skip=5 of=tmp.bin
mv zero.bin old.bin # paranoia
mv tmp.bin zero.bin
Не зацикливайтесь на использовании dd(1). Есть и другие инструменты, например:
(cat data.bin && tail -c +5 zero.bin) > updated.bin