私はシェルコマンドを使用してバイナリを効率的にマージしたいと思い、次の古典的な方法をすばやく見つけました。
cat file1 file2 > file3
悪くはありませんが:
- 非常に遅い。 IOアクセスが遅い。
- 追加スペースが必要です。ファイルをコピーしたくありません。ただ接続してください。
ファイルシステムは、ファイルの断片化を処理するのに適しています。このメカニズムを使用してファイルをマージできませんか?
答え1
次のことができます。
cat file2 file3 [...] filen >> file1
これによりfile2
、、、file3
...がfilen
in-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