引数として指定されたファイルからデータを読み取ることを期待するプログラムにデータをストリーミングするにはどうすればよいですか?


17

gzipで圧縮された巨大なファイルがあり、プログラム(この場合は4s-import)で読み取りたい。最初にファイルを解凍し、次にファイルへのパスを引数としてプログラムを呼び出すには、多くの時間がかかります。次のようなことをすることは可能でしょうか?

zcat huge.gz | 4s-import <SOME MAGIC>

SOME-MAGICは、stdinを含む抽象ファイルへのパスのようなものですか?

私がしなければならない非常に遅くてディスクスペースを消費する代替手段は次のとおりです:

zcat huge.gz > huger
4s-import huger

回答:


32

(または)のプロセス置換演算子<()を使用できます。bashzsh

4s-import <(zcat huge.gz)

この演算子は一時的なfifoを作成し、文字列で/dev/fd/NN置き換え<(.)ます/dev/fd/NN4s-importこれ/dev/fd/NNでfifoを開いて読み取ることができますが、bash実行するzcat huge.gzとに出力が送信され/dev/fd/NNます。


17
  1. 多くのプログラムには-標準入力があります。もしそうなら、それを「ビルトイン」として使用します。

  2. /dev/stdinまたは/dev/fd/0ファイルとして使用することもできます。

  3. 3番目のオプションはmkfifo、fifo特殊ファイルの作成に使用することです。一方のシェルではデータをパイプし(例gunzip > your_fifo_file:)、もう一方のシェルではfifoをファイルとしてプログラムを呼び出します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.