Tanto quanto eu sei, não há como dizer dd
para usar o pad 0xFF
. Mas há uma solução alternativa.
Primeiro, crie um arquivo com o comprimento necessário preenchido com 0xFF
:
$ dd if=/dev/zero ibs=1k count=100 | tr "\000" "\377" >paddedFile.bin
100+0 records in
200+0 records out
102400 bytes (102 kB) copied, 0,0114595 s, 8,9 MB/s
tr
é usado para substituir zeros por 0xFF
. tr
espera argumentos em octal. 0xFF
em octal é \377
.
Resultado:
$ hexdump -C paddedFile.bin
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
Em seguida, insira o arquivo de entrada no início do arquivo "preenchido":
$ dd if=inputFile.bin of=paddedFile.bin conv=notrunc
0+1 records in
0+1 records out
8 bytes (8 B) copied, 7,4311e-05 s, 108 kB/s
Observe o conv=notrunc
que diz dd
para não truncar o arquivo de saída.
Arquivo de entrada de exemplo:
$ hexdump -C inputFile.bin
00000000 66 6f 6f 0a 62 61 72 0a |foo.bar.|
00000008
Resultado:
$ hexdump -C paddedFile.bin
00000000 66 6f 6f 0a 62 61 72 0a ff ff ff ff ff ff ff ff |foo.bar.........|
00000010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
paddedFile.bin
é preenchidoc3 bf
. Eu quero saber porque? edit: superuser.com/questions/1349494/…Uma possível melhoria na resposta da lesmana é operar o arquivo no local. Isso pode ser muito mais rápido para arquivos de entrada grandes e também manterá os arquivos esparsos escassos. No entanto, em muitas situações, você não deseja modificar seu arquivo de entrada e, portanto, esse método será inadequado.
O exemplo a seguir começa com um arquivo de entrada grande e escasso e comporta até um tamanho de 1 GB com caracteres FF. Simplesmente mude
newsize
para o valor desejado. Como você pode ver, add
parte leva apenas uma fração de segundo, apesar deste arquivo ser muito grande.fonte