我有一个巨大的 gzip 压缩文件,我想要一个程序(在本例中为 4s-import)来读取它。首先解压缩文件,然后以文件路径作为参数调用程序,需要花费大量时间。是否可以做类似的事情:
zcat huge.gz | 4s-import <SOME MAGIC>
其中 SOME-MAGIC 就像包含 stdin 的抽象文件的路径?
否则我必须做的更慢且消耗更多磁盘空间的替代方案是:
zcat huge.gz > huger
4s-import huger
答案1
您可以使用(或)<()
的过程替换运算符:bash
zsh
4s-import <(zcat huge.gz)
该运算符将创建一个临时 fifo/dev/fd/NN
并替换<(.)
为 string /dev/fd/NN
。4s-import
now 可以打开/dev/fd/NN
并读取该 fifo,而bash
will runzcat huge.gz
会将其输出发送到/dev/fd/NN
.
答案2
许多程序都有一个
-
标准输入。如果您的这样做,请使用它,因为它是“内置的”。您也可以尝试使用
/dev/stdin
或/dev/fd/0
作为文件。第三个选项是用于
mkfifo
创建 fifo 特殊文件。在一个 shell 中,您通过管道输入数据(例如gunzip > your_fifo_file
),而在另一个 shell 中,您使用 fifo 作为文件来调用程序。