Wie fülle ich eine Datei mit „FF“ mit dd auf?

20

Wie fülle ich eine Datei mit 0xFFauf dd?

Dieser Befehl füllt die Ausgabedatei mit Nullen auf, bis die Dateigröße 100 KB erreicht:

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

Ich möchte jedoch eine Datei mit 0xFFs anstelle von 0x00s auffüllen.

XP1
quelle

Antworten:

29

Soweit ich weiß, gibt es keine Möglichkeit, die Verwendung ddvon Pads zu verdeutlichen 0xFF. Es gibt jedoch eine Problemumgehung.

Erstellen Sie zuerst eine Datei mit der erforderlichen Länge, gefüllt mit 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

trwird verwendet, um Nullen durch zu ersetzen 0xFF. trErwartet Argumente in Oktal. 0xFFim oktal ist \377.

Ergebnis:

$ hexdump -C paddedFile.bin 
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00019000

Fügen Sie dann die Eingabedatei am Anfang der "aufgefüllten" Datei ein:

$ 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

Beachten Sie conv=notrunc, dass dddie Ausgabedatei nicht abgeschnitten werden soll.

Beispiel Eingabedatei:

$ hexdump -C inputFile.bin 
00000000  66 6f 6f 0a 62 61 72 0a                           |foo.bar.|
00000008

Ergebnis:

$ 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
Lesmana
quelle
2
Schritt 1 funktioniert unter Linux, aber in osx ist die Datei paddedFile.binmit gefüllt c3 bf. Ich wundere mich warum? edit: superuser.com/questions/1349494/...
Synesso
1

Eine mögliche Verbesserung der Antwort von Lesmana besteht darin, die Datei direkt zu bearbeiten. Dies kann bei großen Eingabedateien sehr viel schneller sein und führt auch dazu, dass nur wenige Dateien vorhanden sind. In vielen Situationen möchten Sie Ihre Eingabedatei jedoch nicht ändern, weshalb diese Methode nicht geeignet ist.

Das folgende Beispiel beginnt mit einer großen, spärlichen Eingabedatei und füllt sie mit FF-Zeichen bis zu einer Größe von 1 GB auf. Wechseln newsizeSie einfach zu Ihrem gewünschten Wert. Wie Sie sehen, dddauert der Teil nur einen Bruchteil einer Sekunde, obwohl diese Datei sehr groß ist.

$ 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
asdf
quelle