ファイルシステムを処理して、コピー操作なしでバイナリファイルをマージできますか?

ファイルシステムを処理して、コピー操作なしでバイナリファイルをマージできますか?

私はシェルコマンドを使用してバイナリを効率的にマージしたいと思い、次の古典的な方法をすばやく見つけました。

cat file1 file2 > file3

悪くはありませんが:

  1. 非常に遅い。 IOアクセスが遅い。
  2. 追加スペースが必要です。ファイルをコピーしたくありません。ただ接続してください。

ファイルシステムは、ファイルの断片化を処理するのに適しています。このメカニズムを使用してファイルをマージできませんか?

答え1

次のことができます。

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

これによりfile2、、、file3...がfilenin-placeの末尾に連結されます。file1この>>演算子はシェルに書き込むように指示します。ファイルの終わり

「ファイル断片化処理」のためにファイルシステムを活用しようとしています。残念ながら、これを行う普遍的な方法はありません。これは、「ファイルシステム」がディスク上のファイルシステムよりも一般的であるためです。たとえば、次のようになります。ネットワークファイルシステムヒューズ、そしてあらゆる種類のリソースを公開できる他の多くのメカニズム(ブロックデバイスハードディスクなど)をファイルシステム階層として使用します。ブロックデバイスベースのファイルシステムの場合でも、これを行うための標準的なメカニズムはなく、実装固有のメカニズムもわかりません。

答え2

list.txtファイル名を「newline delimited」というテキストファイルに順番に入力します。次に、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

関連情報