如何将数据流式传输到希望从作为参数给出的文件中读取数据的程序?

如何将数据流式传输到希望从作为参数给出的文件中读取数据的程序?

我有一个巨大的 gzip 压缩文件,我想要一个程序(在本例中为 4s-import)来读取它。首先解压缩文件,然后以文件路径作为参数调用程序,需要花费大量时间。是否可以做类似的事情:

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

其中 SOME-MAGIC 就像包含 stdin 的抽象文件的路径?

否则我必须做的更慢且消耗更多磁盘空间的替代方案是:

zcat huge.gz > huger
4s-import huger

答案1

您可以使用(或)<()的过程替换运算符:bashzsh

4s-import <(zcat huge.gz)

该运算符将创建一个临时 fifo/dev/fd/NN并替换<(.)为 string /dev/fd/NN4s-importnow 可以打开/dev/fd/NN并读取该 fifo,而bashwill runzcat huge.gz会将其输出发送到/dev/fd/NN.

答案2

  1. 许多程序都有一个-标准输入。如果您的这样做,请使用它,因为它是“内置的”。

  2. 您也可以尝试使用/dev/stdin/dev/fd/0作为文件。

  3. 第三个选项是用于mkfifo创建 fifo 特殊文件。在一个 shell 中,您通过管道输入数据(例如gunzip > your_fifo_file),而在另一个 shell 中,您使用 fifo 作为文件来调用程序。

相关内容