Sobrescrever uma parte de um arquivo sem modificação para o conteúdo não modificado [duplicado]

2

Eu basicamente gostaria de criar um arquivo alocado, digamos 1GB com conteúdo. Então, esperançosamente, usando algum utilitário de linha de comando eu gostaria de substituir uma parte do arquivo, vamos dizer que o início de 4 MB SOMENTE deixando o resto do conteúdo do arquivo in-tact. Eu verifiquei cp e dd, mas eles não parecem ter nada parecido com isto. Talvez eu esteja procurando no lugar errado e / ou não entendendo as implicações de algumas das opções.

Sim, eu poderia gerar um programa em C para fazer isso, mas minha preferência por portabilidade é usar uma situação de linha de comando.

Alguma idéia?

    
por mdpc 31.01.2017 / 22:42

2 respostas

3

Exemplo com dd :

$ cat data
insertion goes here: <...>

$ cat insert
ABC 123 XYZ

$ dd if=insert skip=4 count=3 of=data seek=22 bs=1 conv=notrunc
3+0 records in
3+0 records out
3 bytes transferred in 0.001 secs (2918 bytes/sec)

$ cat data
insertion goes here: <123>

O comando dd que usei aqui pula 4 blocos no arquivo de entrada e depois lê 3 blocos. Os blocos são gravados no arquivo de saída depois de procurar 22 blocos nele. A saída não está truncada. Um bloco é um byte.

    
por 31.01.2017 / 23:03
3

Isso funciona para mim:

$ echo aaaaaaaaaa > a
$ echo bbbbbbbbbb > b
$ dd if=a of=b conv=notrunc ibs=1 obs=1 seek=3 count=4
$ cat b
bbbaaaabbb
    
por 31.01.2017 / 23:03

Tags