GNU/Linux >> Linux の 問題 >  >> Linux

分割後にファイルを再度結合する最良の方法は何ですか?

それこそが cat のために作られました。これは最も古い GNU ツールの 1 つであるため、他のツールがこれほど高速で優れているとは考えにくいと思います。 パイピングではありません - 出力をリダイレクトするだけです。


ボンネットの下

最初のファイルをコピーし、その後に 2 番目のファイルをコピーするよりも効率的な方法はありません。両方の DOS copycat そうしてください。

各ファイルは、ディスク上の他のファイルとは別に保存されます。ディスクのようなデバイスにデータを保存するように設計されたほとんどすべてのファイルシステムは、ブロック単位で動作します。何が起こるかを非常に単純化して示します。ディスクは、たとえば 1kB のブロックに分割され、オペレーティング システムはファイルごとに、それを構成するブロックのリストを保存します。ほとんどのファイルの長さは整数のブロック数ではないため、最後のブロックは部分的にしか占有されていません。実際には、ファイルシステムには、いくつかのファイル間で最後の部分ブロックを共有したり、「ブロック 46798、ブロック 46799、…」ではなく「ブロック 46798 から 47913」を保存したりするなど、多くの最適化があります。オペレーティング システムが新しいファイルを作成する必要がある場合、空きブロックを探します。ブロックは連続している必要はありません。ブロック 4、5、98、および 178 だけが空いている場合でも、4kB のファイルを保存できます。バイト レベルに下げるのではなくブロックを使用すると、新しいファイルや拡大するファイルの空きブロックを見つけるのが大幅に高速になり、大量のファイルを作成、拡大、削除、または縮小する際の断片化による問題が軽減されます (穴)

ファイルの途中で部分ブロックをサポートできますが、特にファイルに非順次アクセスする場合はかなり複雑になります。10340 番目のバイトにジャンプするには、11 番目のブロックの 100 番目のバイトにジャンプできなくなります。介在するすべてのブロックの長さをチェックします。

ブロックを使用すると、2 つのファイルを結合することはできません。一般に、最初のファイルはブロックの途中で終わるからです。確かに、特殊なケースが考えられますが、連結時に両方のファイルを削除したい場合のみです。これは、まれな操作の非常に具体的な処理になります。典型的なファイルシステムでは、多くのファイルが同時にアクセスされるため、このような特別な処理は単独では機能しません。したがって、最適化を追加する場合は、慎重に検討する必要があります。関連するファイルの 1 つを他のプロセスが読み取っている場合はどうなるでしょうか。誰かが A と C を連結しているときに、誰かが A と B を連結しようとするとどうなりますか?等々。全体として、このまれな最適化は大きな負担になります。

全体として、他の場所で大きな犠牲を払わずに、ファイルの結合をより効率的にすることはできません。その価値はありません。

分割と結合について

splitcat ファイルを分割および結合する簡単な方法です。 split cat * となるように、アルファベット順に名前が付けられたファイルを作成します。

cat の欠点 参加の理由は、一般的な障害モードに対して堅牢ではないということです。ファイルの 1 つが切り詰められているか見つからない場合、cat 文句を言うことはありません。出力が破損するだけです。

zipsplit などのマルチパート アーカイブを生成する圧縮ユーティリティがあります。 そして rar -v .それらは、分割に加えて圧縮およびパック (複数のファイルを 1 つにまとめる) (および逆に、結合に加えてアンパックおよび解凍) するため、あまり unixy ではありません。しかし、それらは、すべての部品が揃っていること、および部品が完全であることを確認するという点で役立ちます。


<ブロック引用>

システムの stdin を介してすべてのコンテンツをパイプするよりも効率的な方法があるはずです / stdout

それが実際に起こっていることではないことを除いて。シェルは cat の stdout を接続しています 直接 つまり、「stdout を通過する」ことは、ディスクに書き込むことと同じです。


Linux
  1. 最高のVPSは何ですか:WindowsまたはLinux?

  2. プロセス グループのすべてのメンバーにシグナルを送信する最良の方法は何ですか?

  3. Bash スクリプトのインスタンスが 1 つだけ実行されるようにする最善の方法は何ですか?

  1. inotify を使用する適切な方法は何ですか?

  2. sedにタブを挿入する正しい方法は何ですか?

  3. Javaでメモリ不足の状態を処理する最良の方法は何ですか?

  1. Linux で 2 つ以上のファイルを結合する最速の方法は何ですか?

  2. 多くの起動可能なものでフラッシュドライブを作成する最良の方法は何ですか

  3. /bin を削除しました。回復する最良の方法は何ですか?