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

Linux Pipe viewer, how to split the pipe

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

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

pv 命令运行正常,在控制台显示进度。

我正在尝试拆分标准输出,以在控制台中显示进度并将相同的突出显示保存到文件中。

我尝试用 tee 这样做,但无法正常工作。

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

关于如何将进度显示到控制台并同时将其保存到文件的任何建议?

谢谢!

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

不确定您的原始命令是否有效,因为提供给 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.

编辑
正如@DownloadPizza 所建议的,您可以使用进程替换(请参阅 How do I write stderr to a file while using "tee" with a pipe?)。通过在 pv 中使用 -f 标志,您的命令将变为

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

并将产生预期的输出。