バイナリファイルに特定の数のゼロを自動的に書き込むには?
私は書く:
#!/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
携帯性が必要ですそして8進数の文字エスケープをサポートします。
i=0
while [ "$i" -le 127 ]; do
printf '\000'
i=$((i+1))
done >> file.bin
(printf
そのように16進エスケープをサポートする必要はありませんが、\x00
多くのシェルではサポートされています。)
バラよりなぜprintfがechoより優れているのですか?問題が発生しましたecho
。
答え2
ファイルが0の場合、明らかなのは次のとおりです。
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`はブロックがいくつあるかを示します。いくつかの小さな塊よりも1つの塊として書く方が良いです!
上記のコマンドは次のとおりです。いいえに添付するとfile.bin
上書きされます。 1つの方法は次のとおりです。
dd if=/dev/zero bs=128 count=1 >> file.bin
説明:そうでない場合は、標準出力に書き込み、of=
出力dd
ファイルに追加します。
答え3
printf
すべてのパラメータで同じ形式が再利用されます。- この形式は
%.0s
引数の一部を印刷しません。
これらを組み合わせるとかなり良い結果が得られます
$ printf '\0%.0s' {1..128} >128nulls
128個のnull値。