ファイルを別のファイルに書き込む方法

ファイルを別のファイルに書き込む方法

別のファイル(サイズ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これにより、オフセットfile10(最初の部分)が記録されます。

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

バイトオフセットの場合、ddWarrenのソリューションを使用する方が便利です。

関連情報