Come riempire un file con "FF" usando dd?


20

Come riempire un file con l' 0xFFutilizzo dd?

Questo comando riempie il file di output di zero fino a quando la dimensione del file raggiunge 100 KB:

dd if=inputFile.bin ibs=1k count=100 of=paddedFile.bin conv=sync

Tuttavia, voglio riempire un file con 0xFFs anziché 0x00s.

Risposte:


29

Per quanto ne so non c'è modo di dire ddal 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. trsi aspetta argomenti in ottale. 0xFFnell'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=notruncche indica dddi 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

2
Il passaggio 1 funziona su Linux, ma in osx il file paddedFile.binè pieno c3 bf. Mi chiedo perché? modifica: superuser.com/questions/1349494/…
Synesso

1

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 newsizeal valore desiderato. Come puoi vedere, la ddporzione 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.