如何自动在二进制文件中写入特定数量的零?
我写的:
#!/bin/bash
for i in {0..127};
do
echo -e -n "\x00" >> file.bin
done
但是使用 Bless 输出查看文件:2D 65 20 2D 6E 20 5C 78 30 30 0A
对应于-e -n \x00
.
答案1
printf
应该是便携式的并支持八进制字符转义:
i=0
while [ "$i" -le 127 ]; do
printf '\000'
i=$((i+1))
done >> file.bin
(printf
不需要像 那样支持十六进制转义\x00
,但许多 shell 支持这一点。)
看为什么 printf 比 echo 更好?对于 的麻烦echo
。
答案2
如果文件为零,那么显而易见的是:
dd if=/dev/zero of=file.bin bs=1 count=128
请注意,这实际上是非常低效的,因为它执行的是单字节写入。您可以轻松地使用:
dd if=/dev/zero of=file.bin bs=128 count=1
这里,bs' is the 'block size' and
count`是有多少个块。写一个块比写很多小块更好!
请注意,上述命令的作用是不是附加到file.bin
,他们会覆盖它。一种方法是:
dd if=/dev/zero bs=128 count=1 >> file.bin
说明:如果没有of=
,dd
则写入标准输出,然后将其附加到输出文件。
答案3
printf
将为所有参数重新使用相同的格式。- 该格式
%.0s
不会打印其参数的任何部分。
将这些结合起来就可以得到相当不错的效果
$ printf '\0%.0s' {1..128} >128nulls
128 个空值。