Se você sabe exatamente qual região dos dados deseja copiar, use dd
:
dd conv=notrunc if=input of=output seek=123456 skip=123456 bs=4k count=128
Isso iria copiar 128 blocos de 4k da entrada para a saída, começando em 123456.
Seria prudente fazer backup dos blocos que você está prestes a substituir primeiro:
dd if=output skip=123456 bs=4k count=128 of=output-backup-bs4k-pos123456
Se você não sabe qual região dos dados copiar ou não tem certeza, GNU dd
por acaso conhece sparse
.
dd conv=notrunc,sparse if=input of=output bs=4k
Isso copia todos os blocos de entrada de 4k diferentes de zero para a saída. Use bs=512
se seus blocos forem menores!
Observe que não há um backup com esse método, então é melhor copiar o arquivo, se for importante.