Linux管道查看器,如何拆分管道



我正在尝试使用pv提取大的.tar文件。

pv large_file.tar.gz | tar -xcf /../MyFolder.

pv命令的工作方式与预期的一样,显示控制台中的进度。

我正试图将stdout拆分,以便在控制台中显示进度,并将相同的突出结果保存到一个文件中。

我试着用tee这样做,但没能成功。

pv large_file.tar.gz | tee /tmp/strout.log | tar -xcf /../MyFolder

有什么建议吗?我如何在控制台上显示进度,同时将其保存到文件中?

谢谢!

不确定您的原始命令是否有效,因为给tar的选项中有几个错误。

假设../MyFolder存在,您的第一个命令需要是

pv large_file.tar.gz | tar -xz -C ../MyFolder

如果在pvtar调用之间插入tee调用,则整个链都可以工作。

pv large_file.tar.gz | tee /tmp/strout.log | tar -xz -C ../MyFolder

不过,我不确定它是否符合你的期望。如果将pv输出管道传输到tee,tee将其管道传输到tar,并将与原始tar相同的内容转储到/tmp/strout.log,从而将tar提取到../MyFolder并复制到/tmp/strout.log。

EDIT
根据@DownloadPizza的建议,您可以使用进程替换(请参阅如何在使用带管道的"tee"时将stderr写入文件?(。通过将-f标志与pv一起使用,您的命令将变为

pv -f large_file.tar.gz 2> >(tee /tmp/strout.log) > >(tar -xz -C ../MyFolder)

并将产生预期的产出。

PV进度被发送到stderr,你能尝试一下吗?:pv large_file.tar.gz > >(tar -xz -C ./MyFolder/) | echo你可能需要编辑tar命令,因为我无法让你的命令为我工作

最新更新