Wie füllt man eine Datei mit "FF" mit dd auf?

35686
XP1

Wie füllt man eine Datei mit 0xFFusing dd?

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

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

Ich möchte jedoch eine Datei mit 0xFFs statt mit s 0x00füllen.

20

2 Antworten auf die Frage

27
lesmana

Soweit ich weiß, gibt es keine Möglichkeit dd, Pad zu verwenden 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. 0xFFin 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=notruncwelche erzählt dddie Ausgabedatei nicht gestutzt.

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 
Schritt 1 funktioniert unter Linux, aber in osx ist die Datei "paddedFile.bin" mit "c3 bf" gefüllt. Ich wundere mich warum? edit: https://superuser.com/questions/1349494/filling-file-with-0xff-gives-c3bf-in-osx Synesso vor 5 Jahren 1
1
asdf

Eine mögliche Verbesserung der Antwort von lesmana besteht darin, die Datei direkt zu bearbeiten. Dies kann bei großen Eingabedateien viel schneller sein und sparsame Dateien werden außerdem spärlich. In vielen Situationen möchten Sie jedoch Ihre Eingabedatei nicht ändern. Daher ist diese Methode ungeeignet.

Das folgende Beispiel beginnt mit einer großen, spärlichen Eingabedatei und füllt diese mit FF-Zeichen auf eine Größe von 1 GB auf. Ändern newsizeSie einfach den 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