Risposte:
Per quanto ne so non c'è modo di dire dd
al pad usando 0xFF
. Ma c'è una soluzione alternativa.
Innanzitutto creare un file con la lunghezza richiesta riempita con 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
è usato per sostituire gli zeri con 0xFF
. tr
si aspetta argomenti in ottale. 0xFF
nell'ottale è \377
.
Risultato:
$ hexdump -C paddedFile.bin
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
Quindi inserire il file di input all'inizio del file "imbottito":
$ 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
Si noti conv=notrunc
che indica dd
di non troncare il file di output.
Esempio di file di input:
$ hexdump -C inputFile.bin
00000000 66 6f 6f 0a 62 61 72 0a |foo.bar.|
00000008
Risultato:
$ 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
Un possibile miglioramento sulla risposta di lesmana è di operare sul file sul posto. Questo potrebbe essere molto più veloce per file di input di grandi dimensioni e manterrà anche i file sparsi. Tuttavia, in molte situazioni non si desidera modificare il file di input, quindi questo metodo non sarà adatto.
L'esempio seguente inizia con un file di input di grandi dimensioni e sparso e lo riempie fino a una dimensione di 1 GB con caratteri FF. Basta cambiare newsize
al valore desiderato. Come puoi vedere, la dd
porzione richiede solo una frazione di secondo nonostante questo file sia molto grande.
$ ls -ld inputFile.bin
-rw-rw-r-- 1 … 1073741700 … inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000
3fffff84
$ newsize=$((1024 * 1024 * 1024))
$ filesize=$(stat -c "%s" inputFile.bin)
$ padcount=$((newsize - filesize))
$ dd if=/dev/zero ibs=1 count="$padcount" | tr "\000" "\377" >> inputFile.bin
124+0 records in
0+1 records out
124 bytes (124 B) copied, 0.000162309 s, 764 kB/s
$ ls -ld inputFile.bin
-rw-rw-r-- 1 … 1073741824 … inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000 ffff ffff ffff ffff ffff ffff
3fffff90 ffff ffff ffff ffff ffff ffff ffff ffff
*
40000000
paddedFile.bin
è pienoc3 bf
. Mi chiedo perché? modifica: superuser.com/questions/1349494/…