Como escrever um arquivo em outro

4

Eu tenho um arquivo vazio (apenas zeros estão nele) de tamanho 9,0 KB e eu preciso escrever outro arquivo (com tamanho 1,1KB) para ele, mas o primeiro arquivo não deve perder seu tamanho ou o resto de seu conteúdo. Então, se o arquivo inteiro for 00000000000000... agora, eu preciso escrever o segundo arquivo nele e deixar os zeros como estão. Eu tentei usar dd , mas não consegui - redimensionar arquivos.

dd if=out/one.img of=out/go.img

Alguém sabe como posso fazer isso?

    
por user35443 03.03.2013 / 14:25

2 respostas

10

Para substituir o início do arquivo de destino sem truncá-lo, forneça a diretiva de conversão notrunc :

$ dd if=out/one.img of=out/go.img conv=notrunc

Se você quisesse os dados do arquivo de origem anexados ao destino, poderá fazer isso com a diretiva seek :

$ dd if=out/one.img of=out/go.img bs=1k seek=9

Isso diz a dd que o tamanho do bloco é de 1 kiB, de forma que o seek avance 9 kiB antes de fazer a gravação.

Você também pode combinar os dois formulários. Por exemplo, para sobrescrever o bloco segundo 1 kiB no arquivo com uma fonte de 1 kiB:

$ dd if=out/one.img of=out/go.img bs=1k seek=9 conv=notrunc

Ou seja, ele pula o primeiro 1 kiB do arquivo de saída, sobrescreve os dados encontrados lá com os dados do arquivo de entrada e fecha a saída sem truncá-los primeiro.

    
por 03.03.2013 / 14:48
5

Basta abrir o arquivo de destino no modo de leitura / gravação com o operador de redirecionamento <> em vez de somente gravação com truncamento com > :

Supondo que você queira escrever file2 sobre file1 :

cat file2 1<> file1

Isso gravaria file2 em file1 no deslocamento 0 (no início).

Se você quiser acrescentar file2 no final de file1 , use o operador >> .

cat file2 >> file1

Você também pode escrever file2 em qualquer deslocamento dentro de file1 com:

{ head -c1000 # for 1000 bytes within or
  # head -n 10 # for 10 lines within
  cat file2 >&0
} <> file1 > /dev/null

Embora para compensações de byte, você provavelmente achará que usar as soluções dd de Warren é mais conveniente.

    
por 03.03.2013 / 16:37

Tags