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
の原因となるバッファリングの問題があるように思われるためです。 そこに供給されるデータの最後のビットを書き込まないでください。私の希望は、誰かがこれに対処するための洞察を提供できることです。