web-dev-qa-db-ja.com

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

サイズ9,0KBの空のファイル(ゼロのみが含まれています)があり、別のファイル(サイズ1,1KB)を書き込む必要がありますが、最初のファイルのサイズまたは残りの内容が失われてはなりません。したがって、ファイル全体が00000000000000...になっている場合は、2番目のファイルをそのファイルに書き込み、ゼロをそのままにしておく必要があります。 ddを使用しようとしましたが、成功しませんでした。ファイルのサイズが変更されます。

dd if=out/one.img of=out/go.img

どうすればいいのか誰か知っていますか?

7
user35443

宛先ファイルの先頭を切り捨てずに上書きするには、notrunc変換ディレクティブを指定します。

$ dd if=out/one.img of=out/go.img conv=notrunc

ソースファイルのデータappendedを宛先に送信したい場合は、seekディレクティブを使用してそれを行うことができます。

$ dd if=out/one.img of=out/go.img bs=1k seek=9

これは、ブロックサイズが1 kiBであることをddに通知するため、seekは書き込みを行う前に9kiB進みます。

2つの形式を組み合わせることもできます。たとえば、ファイル内のsecond 1kiBブロックを1kiBソースで上書きするには:

$ dd if=out/one.img of=out/go.img bs=1k seek=9 conv=notrunc

つまり、出力ファイルの最初の1 kiBをスキップし、そこで見つかったデータを入力ファイルのデータで上書きしてから、最初に切り捨てずに出力を閉じます。

12
Warren Young

<>を使用した切り捨てを使用した書き込み専用ではなく、>シェルリダイレクト演算子を使用してターゲットファイルを読み取り/書き込みモードで開くだけです。

file2の上にfile1を書きたいと仮定します。

cat file2 1<> file1

これにより、オフセット0(先頭)でfile2file1に書き込まれます。

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ソリューションを使用する方が便利な場合があります。

5