我正在尝试使用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
如果在pv
和tar
调用之间插入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命令,因为我无法让你的命令为我工作