tar处理小文件时,非常快,不需要看进度。
但当文件比较大时,耗时较长,这时需要个进度条看一下,以评估剩余时间。
Linux下,可以使用pv来显示进度。
pv用来监视数据通过pipe的进度,能够显示耗时、完成率(进度条)、当前吞吐率、总传输字节等信息。
使用方式:在两个程序之间,以合适的参数插入pipeline。
pv将会把提供的文件拷贝到标准输出,如果没有指定文件,将拷贝标准输入,这时它的行为和cat一致。
如,查看使用nc传输一个文件的速度:
pv file | nc -w 1 somewhere.com 3000
同样的目的,也可以这样写:
cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
这种方式提供了两个不同的命令:cat和nc,而pv在中间,-s指定了文件的大小,单位是字节。
查看man page了解更多信息。
压缩文件时,在tar和gzip中间使用pv,把待压缩的文件的大小传递给pv:
tar -cf - a.csv | pv -s $(du -sb a.csv | awk '{print $1}') | gzip > a.tgz
其中,横线表示把tar的结果传送到标准输出,以作为gzip的输入。
解压缩:
pv question.tar.gz | tar -zxf -
直接把文件传递给pv,pv把文件读取到stdout,作为tar的输入。
这时只是利用了pv命令实现了速率展示。
当然也可以结合其他命令,让pv实现更多有意思的功能。