管道传输到压缩文件但也将内容打印到终端

管道传输到压缩文件但也将内容打印到终端

我如何维护程序的可读输出,同时将相同的输出放入压缩文件、gzip 或其他文件,以便以后可以解析它?

我运行了一个命令,该命令生成了很多相同的明文行,这些行应该很容易压缩,但我还想监视该命令的输出。我知道我可以使用tee打印,然后将 stdin 放入文件中。但文件很大(250MB+)。我还知道我可以使用gzip将 stdin 压缩到文件中,但这样我就看不到屏幕上的任何输出,并且 gzip 的--stdout标志只会将压缩数据转储到 stdout,这不是我想要的。

举个例子

python -c 'for i in range(0, 100): print("A" * 120)' | gzip --best > A.log.gz

但我也想看到As 打印到控制台。

答案1

您可以通过组合tee流程替代

python -c 'for i in range(0, 100): print("A" * 120)' | 
  tee >( gzip > compressed.gz)

构造>()是一种进程替换,它允许您将命令视为文件。在这种情况下,打开一个文件进行写入(<()将打开进行读取)。上面的命令将打印到标准输出(因为这是tee默认操作)重定向到特殊的“文件” gzip > compressed.gz,意味着它将打印到该文件,从而传递所有输出gzip并最终传递到压缩文件compressed.gz

相关内容