我們可以透過處理檔案系統來合併二進位檔案而不進行任何複製作業嗎?

我們可以透過處理檔案系統來合併二進位檔案而不進行任何複製作業嗎?

我想使用 shell 命令有效地合併二進位文件,我很快就找到了像這樣的經典方法:

cat file1 file2 > file3

不錯,但是:

  1. 很慢。 IO存取速度慢。
  2. 它需要額外的空間。我不想複製文件。只需將它們連接起來即可。

檔案系統非常適合處理檔案碎片。我們不能使用這種機制來合併文件嗎?

答案1

你可以這樣做:

cat file2 file3 [...] filen >> file1

這會將file2, file3,...連接到就地filen末尾。file1這個>>運算子告訴 shell 寫入文件末

您希望利用檔案系統來「處理檔案碎片」。不幸的是,沒有任何通用的方法可以做到這一點。這是因為“檔案系統”比磁碟上的檔案系統更通用 - 例如,您有網路檔案系統,保險絲,以及許多其他機制,可以讓您公開任何類型的資源(而不僅僅是區塊設備例如硬碟)作為檔案系統層次結構。即使對於基於區塊設備的檔案系統,也沒有一個標準機制可以做到這一點,而且我也不知道任何特定於實現的機制。

答案2

list.txt將檔案名稱依序放入名為「以換行符號分隔」的文字檔案中。然後在 bash 中運行:

while read line; do echo -n . ; dd if="$line" of=out status=none conv=notrunc oflag=append; done < list.txt

這將在當前目錄中建立串聯檔案“out”。

答案3

    dd if=firstfile.raw > completedfile.raw
    dd if=nfile.raw    >> completedfile.raw
    dd if=lastfile.raw >> completedfile.raw

相關內容