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

分割してマージ– DVD付き!?

foo.tar.xzという大きなファイルがあるとします。 。
split -b 4689887232 foo.tar.xz foo.tar.xz.foo.tar.xz.aaという名前のファイルが表示されます 、foo.tar.xz.ab 、など。
次に、各ファイルを別のDVDに書き込み、かなり大きな伝書鳩を使用してアリスに送信します。

これで、アリスは各DVDを挿入し、各ファイルを自分のPCにコピーして、catを使用できるようになりました。 およびxz fooのコンテンツを取得するには :cat foo.tar.xz.* | tar xfJ -

ここで、アリスのPCに、抽出されたfooのコンテンツを保存するのに十分なスペースがあると仮定します。 。 catのフレーバーはありますか? これらのファイルをDVDから直接読み取り、ストリームを一時停止して、次のDVDを挿入できるようにしますか? pausecatのようなもの またはvolumecat

承認された回答:

そのようなcatを知りません フレーバーですが、これがほぼ 作品:

  1. 1つの端末でmkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. 最初のDVDをDVD-ROMドライブ(例:dev / sr0)に挿入します。
  3. 2番目の端末で、dd if=/dev/sr0 of=myfifoを実行します
  4. ddの場合 完了したら、DVDを取り出します。
  5. 別のDVDがある場合は、DVD-ROMドライブに挿入して手順3に進みます。それ以外の場合は、手順6に進みます。
  6. 最初のターミナルで、CTRL-Cを押してtailを強制終了します およびtar

仕組み

秘訣はtailを使用することです 名前付きパイプから継続的に読み取る。 tailの出力 次に、実行するコマンドにパイプされます。最初はパイプが開いていないので、何も起こりません。ただし、ddを使用してデータをパイプに送り始めると 、tail それを受け取り、コマンドに転送します。

パイプへのデータの流れが停止すると、魔法が起こります:tail 標準の出力ファイル記述子を開いたままにします。これにより、コマンドが一時停止します。一方、tail 単に追加の入力を待つだけです。

問題

ほぼ機能していると言ったのは、tailの原因となるバッファリングの問題があるように思われるためです。 そこに供給されるデータの最後のビットを書き込まないでください。私の希望は、誰かがこれに対処するための洞察を提供できることです。

関連:文字列フィールドをjqの配列に分割しますか?
Linux
  1. Rsync〜/ foo Target / fooはRsync〜/ foo / Target / foo /と同じですか?

  2. ファイルを検索して tar (スペースを含む)

  3. 名前に特殊文字を含むファイルでの find および tar の使用

  1. LvmとDm-cryptでトリミングしますか?

  2. ワイルドカード ファイル パターンを指定した tar -C

  3. 複数のディレクトリとファイルの場所で tar を作成する

  1. 「でスクリプトを実行します。 」と「ソース」で?

  2. 1 つのコマンドで .tar.gz ファイルを開く

  3. stdout と stderr の両方にエコーする