使用 dd 將檔案中的資料複製到另一個檔案的特定位置會截斷輸出文件

使用 dd 將檔案中的資料複製到另一個檔案的特定位置會截斷輸出文件

我有一個包含單一文件系統的環回文件,我們稱之為fs.image.我有另一個更大的環回文件,其中包含多個分區和多個文件系統,我們稱之為disk.image.

fs.image與 中的分割區之一大小完全相同disk.image。我想將其中的資料複製到disk.image文件中的正確位置。

我有一個計算正確偏移量的腳本,並嘗試使用dd.我認為這會起作用,因為它適用於塊設備,但事實並非如此。disk.image在剛寫入的資料之後的位置被截斷。

有什麼辦法可以避免dd截斷文件嗎?

fs.image被壓縮為fs.image.bz2,我正在執行的命令如下:

bzcat fs.image.bz2 | dd of=disk.image bs=4M seek=$OFFSET

我計算的偏移量在哪裡$OFFSET

我考慮過其他方法來實現這一點,但這似乎是最簡單的(如果有效的話)。一個選項是將資料複製到插入點到另一個文件,附加文件系統,最後附加原始文件的其餘部分。然而,這會很慢,因為我會複製很多我其實不需要的資料。我對其他選擇持開放態度。

答案1

GNU dd(至少版本 8.23)具有以下內容轉換標誌

不截斷 不要截斷輸出文件

這正是你想要的;這是一個小例子:

$ cat foo
foobar
$ echo -n XX | dd of=foo bs=1c seek=1 conv=notrunc
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000283698 s, 7.0 kB/s
$ cat foo
fXXbar

相關內容