pv – 在 Linux 下查看命令执行进度

pv 是 Pipe Viewer 的缩写,也就是管道查看器。挡在命令行执行命令的时候,可以通过使用 pv 来指导当前的进度。

# 使用

## 替换 cat

比如你要把一个日志打包好下载:

“`
% gzip -c access.log > access.log.gz
“`

可以改成

“`
% cat access.log | gzip > access.log.gz
“`

使用 pv

“`
% pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=> ] 15% ETA 0:00:59
“`

## 使用多个 pv

可以使用多个 pv 来查看在不同阶段的速率

“`
$ pv -cN source access.log | gzip | pv -cN gzip > access.log.gz
source: 760MB 0:00:15 [37.4MB/s] [=> ] 19% ETA 0:01:02
gzip: 34.5MB 0:00:15 [1.74MB/s] [ <=> ]
“`

在上面的命令中,`-c` 是为了防止两个 pv 的显示混在一起。`-N` 表示名字。可以看到读取 access.log 的速率是 37.4 MB/s,而写入 gzip 文件的速率大概是 1.74 MB/s,我们大概也可以得出压缩率大概是21倍。

## 指定文件的大小

可以用下面这个命令压缩一个文件夹。

“`
$ tar -czf – . | pv > out.tgz
117MB 0:00:55 [2.7MB/s] [> ]
“`

在上面的例子中我们可以看到下面 gzip 一行的输出中没有百分比,因为 pv 没法知道 gzip 之后的最终大小,所以没有办法计算进度。可以使用 `-s` 指定大小。

“`
$ tar -cf – . | pv -s $(du -sb . | awk ‘{print $1}’) | gzip > out.tgz
253MB 0:00:05 [46.7MB/s] [> ] 1% ETA 0:04:49
“`

About 逸飞

后端工程师

发表评论

电子邮件地址不会被公开。 必填项已用*标注