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
Другие вопросы по тегам