別のファイル(サイズ1.1 KB)を作成する必要がある9.0 KB(0のみを含む)サイズの空のファイルがありますが、最初のファイルのサイズまたは残りの内容は失われてはいけません。したがって、ファイル全体が00000000000000...
今の場合は、その中に2番目のファイルを作成し、ゼロを変更せずに残す必要があります。私はdd
成功せずにファイルサイズ変更を試してみました。
dd if=out/one.img of=out/go.img
どうすればいいのか知っている人はいますか?
答え1
切り捨てずにオブジェクトファイルの先頭を上書きするには、notrunc
変換ディレクティブを指定します。
$ dd if=out/one.img of=out/go.img conv=notrunc
ソースファイルのデータが必要な場合追加ターゲットに対して次のディレクティブを使用してこれを実行できますseek
。
$ dd if=out/one.img of=out/go.img bs=1k seek=9
これはdd
ブロックサイズが1kiBなので、seek
書き込み前に9kiBが進行したことを示します。
2つのフォームを組み合わせることもできます。たとえば、上書きするには第二1kiBソースを持つファイルの1kiBチャンク:
$ dd if=out/one.img of=out/go.img bs=1k seek=9 conv=notrunc
つまり、出力ファイルの最初の1kiBをスキップし、そこにあるデータを入力ファイルのデータで上書きし、最初に切り捨てずに出力を閉じます。
答え2
<>
トリミングを使用して書き込み専用モードを開くのではなく、シェルリダイレクト演算子を使用して読み書きモードでターゲットファイルを開きます>
。
file2
上に作成したいとしましょうfile1
。
cat file2 1<> file1
file2
これにより、オフセットfile1
0(最初の部分)が記録されます。
file2
最後に追加するには演算子をfile1
使用します。>>
cat file2 >> file1
file2
任意のオフセットに書き込むことができますfile1
。
{ head -c1000 # for 1000 bytes within or
# head -n 10 # for 10 lines within
cat file2 >&0
} <> file1 > /dev/null
バイトオフセットの場合、dd
Warrenのソリューションを使用する方が便利です。