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つの端末で
mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ - - 最初のDVDをDVD-ROMドライブ(例:dev / sr0)に挿入します。
- 2番目の端末で、
dd if=/dev/sr0 of=myfifoを実行します -
ddの場合 完了したら、DVDを取り出します。 - 別のDVDがある場合は、DVD-ROMドライブに挿入して手順3に進みます。それ以外の場合は、手順6に進みます。
- 最初のターミナルで、CTRL-Cを押して
tailを強制終了します およびtar。
仕組み
秘訣はtailを使用することです 名前付きパイプから継続的に読み取る。 tailの出力 次に、実行するコマンドにパイプされます。最初はパイプが開いていないので、何も起こりません。ただし、ddを使用してデータをパイプに送り始めると 、tail それを受け取り、コマンドに転送します。
パイプへのデータの流れが停止すると、魔法が起こります:tail 標準の出力ファイル記述子を開いたままにします。これにより、コマンドが一時停止します。一方、tail 単に追加の入力を待つだけです。
問題
ほぼ機能していると言ったのは、tailの原因となるバッファリングの問題があるように思われるためです。 そこに供給されるデータの最後のビットを書き込まないでください。私の希望は、誰かがこれに対処するための洞察を提供できることです。