如何使用dd填充“ FF”文件?


20

如何垫与文件0xFF使用dd

此命令将用零填充输出文件,直到文件大小达到100 KB:

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

但是,我想用0xFFs而不是0x00s 填充文件。

Answers:


29

据我所知,没有办法告诉ddpad使用0xFF。但是有一种解决方法。

首先创建一个所需长度的文件,并填充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用于用替换零0xFFtr期望参数为八进制。0xFF在八进制是\377

结果:

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

然后将输入文件插入“已填充”文件的开头:

$ 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

请注意,conv=notrunc它告诉dd您不要截断输出文件。

输入文件示例:

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

结果:

$ 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
第1步可在Linux上运行,但在osx中​​,该文件paddedFile.bin充满c3 bf。我想知道为什么?编辑:superuser.com/questions/1349494/…–
Synesso,

1

lesmana答案的可能改进是就地处理该文件。对于大型输入文件,这可能会快得多,并且还会使稀疏文件保持稀疏状态。但是,在许多情况下,您不想修改输入文件,因此此方法将不合适。

下面的示例以一个大而稀疏的输入文件开始,并使用FF字符将其填充到1GB的大小。只需更改newsize为您想要的值即可。如您所见,dd尽管此文件非常大,但该部分仅需花费一秒钟的时间。

$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.