Dd ile “FF” ile bir dosya nasıl doldurulur?


20

Bir dosyayı 0xFFkullanarak nasıl pad dd?

Bu komut, dosya boyutu 100 KB olana kadar çıktı dosyasını sıfırlar.

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

Ancak, bir dosyayı 0xFFs yerine 0x00s ile doldurmak istiyorum .

Yanıtlar:


29

Bildiğim kadarıyla ddkullanarak ped kullanarak söylemenin hiçbir yolu yoktur 0xFF. Ancak bir geçici çözüm var.

İlk önce gerekli uzunlukta doldurulmuş bir dosya oluşturun 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

trsıfırları ile değiştirmek için kullanılır 0xFF. trSekizli tartışmaları bekler. 0xFFsekizlidir \377.

Sonuç:

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

Sonra giriş dosyasını "pedli" dosyanın başına yerleştirin:

$ 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

Not conv=notruncsöyler ddçıktı dosyasını kesmek değil.

Örnek giriş dosyası:

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

Sonuç:

$ 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
Adım 1 Linux'ta çalışır, ancak osx'ta dosya paddedFile.bindoludur c3 bf. Nedenini merak ediyorum? düzenleme: superuser.com/questions/1349494/…
Synesso

1

Lesmana'nın cevabındaki olası bir gelişme, dosyayı yerinde çalıştırmaktır. Bu, büyük giriş dosyaları için çok daha hızlı olabilir ve ayrıca seyrek dosyaları seyrek tutacaktır. Bununla birlikte, birçok durumda giriş dosyanızı değiştirmek istemezsiniz ve bu nedenle bu yöntem uygun olmaz.

Aşağıdaki örnek, geniş, seyrek bir giriş dosyası ile başlar ve FF karakterleriyle 1GB boyutuna kadar doldurur. newsizeİstediğiniz değere basitçe değiştirin . Gördüğünüz gibi, ddbu dosyanın çok büyük olmasına rağmen , kısım saniyenin sadece bir kısmını alıyor.

$ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.