Sobrescrever o meio de um arquivo de um dispositivo de bloco * sem * truncar o arquivo?

2

Eu tenho um sistema Linux (Kubuntu) com um arquivo grande (~ 20Gb) com o qual gostaria de mexer. Especificamente, quero copiar todo o conteúdo de outro arquivo grande (~ 12Gb) para o meio desse arquivo e manter os bits do arquivo que não são sobrescritos.

Isto é o que eu quero que aconteça, com o texto entre os tubos que representam o conteúdo do arquivo:

Antes:

outfile: |abcdefghijklmnopqrstuvwxyz|
infile:  |123456789|

Depois:

outfile: |abcdef123456789pqrstuvwxyz|
(infile is here ^^^^^^^^^)

Eu tentei isso:

dd if=infile of=outfile seek=162

(162 é o número de setores que eu quero compensar no outfile)

Mas foi o que aconteceu:

outfile: |abcdef123456789|
(missing part of outfile ^)

Qual é a melhor maneira de fazer isso?

    
por marcusw 15.01.2010 / 21:30

1 resposta

5

Você precisa especificar conv = notrunc para dd. Da manpage

Any regular output file is truncated unless the notrunc conversion value is specified. If an initial portion of the output file is seeked past (see the oseek operand), the output file is trun- cated at that point.

    
por 15.01.2010 / 22:03