pv
通过管道监控数据的进度

语法

  pv [OPTION] [FILE]...

  pv [-h|-V] 

选项




pv有很多选项,分为显示开关,输出修饰符和常规选项:

显示开关

   -p, --progress
       打开进度条
   -t, --timer
       打开计时器。这将显示pv运行的总耗用时间
   -e, --eta
       打开ETA计时器。
       这将尝试根据之前的传输速率和总数据大小来猜测完成需要多长时间。
       如果不能确定总数据大小,则此选项无效。 
   -r, --rate
       打开速率计数器。这将显示当前的数据传输速率. 
   -b, --bytes
       打开总字节计数器。这将显示到目前为止传输的数据总量
   -n, --numeric
        输出数字百分比。
        pv将给出一个整数百分比,每行一个标准误差,适用于管道到对话框。
        注意,如果使用-n,则不需要-f。
   -q, --quiet
        没有输出。如果单独使用-L选项来限制管道的传输速率,则非常有用。

输出修饰符

   -W, --wait
       等到第一个字节被转移后,才显示进展信息或计算任何ETAs。
       如果您正在管道连接的程序在开始之前需要额外的信息,
       例如管道数据到gpg(1)或mcrypt(1),在数据被处理之前需要一个密码。
   -s SIZE, --size SIZE
       假设在计算百分比和ETAs时要传输的数据总量是SIZE字节。k、m等的后缀可以和-L一样使用
   -l, --line-mode
       不是计数字节,而是计数行(换行字符)。
       只有在找到新行时,进度条才会移动,
       传递给-s选项的值将被解释为行数 
   -i SEC, --interval SEC
       在更新之间等待秒数。默认设置是每秒钟更新一次。注意,这可以是小数,比如0.1。
   -w WIDTH, --width WIDTH
       设置终端宽
   -H HEIGHT, --height HEIGHT
       设置终端行高
   -N NAME, --name NAME
       使用NAME作为输出信息的前缀
   -f, --force
       强制输出
   -c, --cursor
        使用游标定位转义序列而不是仅使用回车符。

数据传输修饰符

   -L RATE, --rate-limit RATE
       设置每秒传输最大字节数
   -B BYTES, --buffer-size BYTES
       设置传输缓冲区大小
   -R PID, --remote PID
       如果PID是已经在运行的pv的一个实例,
       那么-R PID将使该实例充当已经被赋予该实例命令行的hough。
       例如,如果pv -L 123k使用进程ID 9876运行,那么运行pv -R 9876 -L 321k将使它开始使用速率限制为321k而不是123k。 
       注意,有些选项在运行时不能更改,例如-c、-l和-f。


常规选项

   -h, --help
       在标准输出上打印使用消息并成功退出
   -V, --version
       P打印标准输出的版本信息并成功退出。

pv允许用户通过管道查看数据的进度,通过提供诸如已用时间,完成百分比(带进度条),当前吞吐率,传输的总数据和ETA等信息。

要使用它,请使用适当的选项将其插入两个进程之间的管道中。其标准输入将传递到其标准输出,进度将显示在标准错误上。

pv会将每个提供的FILE依次复制到标准输出( - 表示标准输入),或者如果没有指定FILE,则只复制标准输入。这与cat(1)的行为相同。

一个简单的示例,用于观察使用nc(1)传输文件的速度:

pv file | nc -w 1 somewhere.com 3000

一个类似的例子,从另一个进程传输文件并将预期大小传递给pv:

cat file | pv -s 12345 | nc -w 1 somewhere.com 3000

一个更复杂的示例,使用数字输出进入对话框(1)程序以进行全屏进度显示:

(tar cf - . \ 
| pv -n -s 'du -sb . 
| awk '{print $1}'' \ 
| gzip -9 > out.tgz) 2>&1 \ 
| dialog --gauge 'Progress' 7 70

退出状态
退出状态为1表示-R或-P选项存在问题。任何其他退出状态是以下位掩码

2      无法访问
4      输入文件与输出文件相同
8      关闭文件或移动到下一个文件时发生内部错误
16     一个或多个输入文件传输数据时出错。
32     捕获的信号导致提前退出。
64     内存分配失败。
0      表示没有问题。

pv 命令实例:

linux命令:pv access.log | gzip > access.log.gz access.log.gz > gzip | access.log pv pv access.log | gzip > access.log.gzrootopen.com
linux命令:pv access.log | gzip > access.log.gz access.log.gz > gzip | access.log pv pv access.log | gzip > access.log.gzrootopen.com
2018-06-05 19:17:48

linux命令:pv large.xml | xclip xclip | large.xml pv pv large.xml | xcliprootopen.com
linux命令:pv large.xml | xclip xclip | large.xml pv pv large.xml | xcliprootopen.com
2018-05-07 09:09:48

linux命令:pv /dev/zero|ssh $host 'cat > /dev/null' /dev/null' > 'cat $host /dev/zero|ssh pv pv /dev/zero|ssh $host 'cat > /dev/null'rootopen.com
linux命令:pv /dev/zero|ssh $host 'cat > /dev/null' /dev/null' > 'cat $host /dev/zero|ssh pv pv /dev/zero|ssh $host 'cat > /dev/null'rootopen.com
2018-05-26 05:29:48

linux命令:pv file1 > file2 file2 > file1 pv pv file1 > file2rootopen.com
linux命令:pv file1 > file2 file2 > file1 pv pv file1 > file2rootopen.com
2018-01-05 05:03:48

linux命令:pv sourcefile > destfile destfile > sourcefile pv pv sourcefile > destfilerootopen.com
linux命令:pv sourcefile > destfile destfile > sourcefile pv pv sourcefile > destfilerootopen.com
2018-03-30 23:38:48

linux命令:pv -cN orig < foo.tar.bz2 | bzcat | pv -cN bzcat | gzip -9 | pv -cN gzip > foo.tar.gz foo.tar.gz > gzip -cN pv | -9 gzip | bzcat -cN pv | bzcat | foo.tar.bz2 < orig -cN pv pv -cN orig < foo.tar.bz2 | bzcat | pv -cN bzcat | gzip -9 | pv -cN gzip > foo.tar.gzrootopen.com
linux命令:pv -cN orig < foo.tar.bz2 | bzcat | pv -cN bzcat | gzip -9 | pv -cN gzip > foo.tar.gz foo.tar.gz > gzip -cN pv | -9 gzip | bzcat -cN pv | bzcat | foo.tar.bz2 < orig -cN pv pv -cN orig < foo.tar.bz2 | bzcat | pv -cN bzcat | gzip -9 | pv -cN gzip > foo.tar.gzrootopen.com
2018-01-10 22:32:48

linux命令:pv bigdump.sql.gz | gunzip | mysql mysql | gunzip | bigdump.sql.gz pv pv bigdump.sql.gz | gunzip | mysqlrootopen.com
linux命令:pv bigdump.sql.gz | gunzip | mysql mysql | gunzip | bigdump.sql.gz pv pv bigdump.sql.gz | gunzip | mysqlrootopen.com
2018-02-24 12:09:48

linux命令:pvscan | awk '/name_of_vg/ {print $2}' | sed 's/[-|/|]/ /g' | cut -d " " -f7 -f7 " " -d cut | /g' 's/[-|/|]/ sed | $2}' {print '/name_of_vg/ awk | pvscan pvscan | awk '/name_of_vg/ {print $2}' | sed 's/[-|/|]/ /g' | cut -d " " -f7rootopen.com
linux命令:pvscan | awk '/name_of_vg/ {print $2}' | sed 's/[-|/|]/ /g' | cut -d " " -f7 -f7 " " -d cut | /g' 's/[-|/|]/ sed | $2}' {print '/name_of_vg/ awk | pvscan pvscan | awk '/name_of_vg/ {print $2}' | sed 's/[-|/|]/ /g' | cut -d " " -f7rootopen.com
2018-01-31 23:55:48

linux命令:pv -t -p /path/to/sqlfile.sql | mysql -uUSERNAME -pPASSWORD -D DATABASE_NAME DATABASE_NAME -D -pPASSWORD -uUSERNAME mysql | /path/to/sqlfile.sql -p -t pv pv -t -p /path/to/sqlfile.sql | mysql -uUSERNAME -pPASSWORD -D DATABASE_NAMErootopen.com
linux命令:pv -t -p /path/to/sqlfile.sql | mysql -uUSERNAME -pPASSWORD -D DATABASE_NAME DATABASE_NAME -D -pPASSWORD -uUSERNAME mysql | /path/to/sqlfile.sql -p -t pv pv -t -p /path/to/sqlfile.sql | mysql -uUSERNAME -pPASSWORD -D DATABASE_NAMErootopen.com
2018-02-04 18:55:48

linux命令:pv file | gzip > file.gz file.gz > gzip | file pv pv file | gzip > file.gzrootopen.com
linux命令:pv file | gzip > file.gz file.gz > gzip | file pv pv file | gzip > file.gzrootopen.com
2018-04-13 20:11:48

linux命令:pv -s `fdisk -l /dev/sdX|grep "Disk /"|cut -d' ' -f5` /dev/zero >/dev/sdX >/dev/sdX /dev/zero -f5` ' -d' /"|cut "Disk /dev/sdX|grep -l `fdisk -s pv pv -s `fdisk -l /dev/sdX|grep "Disk /"|cut -d' ' -f5` /dev/zero >/dev/sdXrootopen.com
linux命令:pv -s `fdisk -l /dev/sdX|grep "Disk /"|cut -d' ' -f5` /dev/zero >/dev/sdX >/dev/sdX /dev/zero -f5` ' -d' /"|cut "Disk /dev/sdX|grep -l `fdisk -s pv pv -s `fdisk -l /dev/sdX|grep "Disk /"|cut -d' ' -f5` /dev/zero >/dev/sdXrootopen.com
2018-03-06 13:09:48

linux命令:pv -petrs $(stat -c %s file.iso) file.iso | dd bs=1M oflag=sync of=/dev/sdX of=/dev/sdX oflag=sync bs=1M dd | file.iso file.iso) %s -c $(stat -petrs pv pv -petrs $(stat -c %s file.iso) file.iso | dd bs=1M oflag=sync of=/dev/sdXrootopen.com
linux命令:pv -petrs $(stat -c %s file.iso) file.iso | dd bs=1M oflag=sync of=/dev/sdX of=/dev/sdX oflag=sync bs=1M dd | file.iso file.iso) %s -c $(stat -petrs pv pv -petrs $(stat -c %s file.iso) file.iso | dd bs=1M oflag=sync of=/dev/sdXrootopen.com
2018-06-12 05:45:48

linux命令:pv file.iso >/dev/sdX >/dev/sdX file.iso pv pv file.iso >/dev/sdXrootopen.com
linux命令:pv file.iso >/dev/sdX >/dev/sdX file.iso pv pv file.iso >/dev/sdXrootopen.com
2018-04-15 00:30:48

linux命令:pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME DATABASE_NAME -p USERNAME -u mysql | /path/to/sql/dump -e -t -p 1 -i pv pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAMErootopen.com
linux命令:pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME DATABASE_NAME -p USERNAME -u mysql | /path/to/sql/dump -e -t -p 1 -i pv pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAMErootopen.com
2018-03-17 20:20:48

linux命令:pv -tpreb /dev/urandom | dd of=file.img of=file.img dd | /dev/urandom -tpreb pv pv -tpreb /dev/urandom | dd of=file.imgrootopen.com
linux命令:pv -tpreb /dev/urandom | dd of=file.img of=file.img dd | /dev/urandom -tpreb pv pv -tpreb /dev/urandom | dd of=file.imgrootopen.com
2018-02-23 19:30:48

linux命令:pv /dev/urandom -L 3m -i 0.3 > /dev/null /dev/null > 0.3 -i 3m -L /dev/urandom pv pv /dev/urandom -L 3m -i 0.3 > /dev/nullrootopen.com
linux命令:pv /dev/urandom -L 3m -i 0.3 > /dev/null /dev/null > 0.3 -i 3m -L /dev/urandom pv pv /dev/urandom -L 3m -i 0.3 > /dev/nullrootopen.com
2018-01-05 19:06:48

linux命令:pv /dev/random > /dev/null /dev/null > /dev/random pv pv /dev/random > /dev/nullrootopen.com
linux命令:pv /dev/random > /dev/null /dev/null > /dev/random pv pv /dev/random > /dev/nullrootopen.com
2018-05-23 00:25:48

linux命令:pv -tpreb /dev/sda | dd of=/dev/sdb bs=1M bs=1M of=/dev/sdb dd | /dev/sda -tpreb pv pv -tpreb /dev/sda | dd of=/dev/sdb bs=1Mrootopen.com
linux命令:pv -tpreb /dev/sda | dd of=/dev/sdb bs=1M bs=1M of=/dev/sdb dd | /dev/sda -tpreb pv pv -tpreb /dev/sda | dd of=/dev/sdb bs=1Mrootopen.com
2018-03-01 17:44:48

linux命令:pvl() { (for i in "$@"; do youtube-dl -q --max-downloads 1 --no-playlist "$i" -o - | mplayer -vo null /dev/fd/3 3<&0 </dev/tty; sleep .5; done); } } done); .5; sleep </dev/tty; 3<&0 /dev/fd/3 null -vo mplayer | - -o "$i" --no-playlist 1 --max-downloads -q youtube-dl do "$@"; in i (for { pvl() pvl() { (for i in "$@"; do youtube-dl -q --max-downloads 1 --no-playlist "$i" -o - | mplayer -vo null /dev/fd/3 3<&0 </dev/tty; sleep .5; done); }rootopen.com
linux命令:pvl() { (for i in "$@"; do youtube-dl -q --max-downloads 1 --no-playlist "$i" -o - | mplayer -vo null /dev/fd/3 3<&0 </dev/tty; sleep .5; done); } } done); .5; sleep </dev/tty; 3<&0 /dev/fd/3 null -vo mplayer | - -o "$i" --no-playlist 1 --max-downloads -q youtube-dl do "$@"; in i (for { pvl() pvl() { (for i in "$@"; do youtube-dl -q --max-downloads 1 --no-playlist "$i" -o - | mplayer -vo null /dev/fd/3 3<&0 </dev/tty; sleep .5; done); }rootopen.com
2018-03-13 08:17:48

linux命令:pv -tpreb /dev/sdc2 | dd of=/dev/sdb2 bs=64K conv=noerror,sync conv=noerror,sync bs=64K of=/dev/sdb2 dd | /dev/sdc2 -tpreb pv pv -tpreb /dev/sdc2 | dd of=/dev/sdb2 bs=64K conv=noerror,syncrootopen.com
linux命令:pv -tpreb /dev/sdc2 | dd of=/dev/sdb2 bs=64K conv=noerror,sync conv=noerror,sync bs=64K of=/dev/sdb2 dd | /dev/sdc2 -tpreb pv pv -tpreb /dev/sdc2 | dd of=/dev/sdb2 bs=64K conv=noerror,syncrootopen.com
2018-04-18 16:22:48

linux命令:pv file.gz | gzip -d -c > file.out file.out > -c -d gzip | file.gz pv pv file.gz | gzip -d -c > file.outrootopen.com
linux命令:pv file.gz | gzip -d -c > file.out file.out > -c -d gzip | file.gz pv pv file.gz | gzip -d -c > file.outrootopen.com
2018-04-24 18:01:48

linux命令:pve () { source ~/Documents/venvs/$1/bin/activate } } ~/Documents/venvs/$1/bin/activate source { () pve pve () { source ~/Documents/venvs/$1/bin/activate }rootopen.com
linux命令:pve () { source ~/Documents/venvs/$1/bin/activate } } ~/Documents/venvs/$1/bin/activate source { () pve pve () { source ~/Documents/venvs/$1/bin/activate }rootopen.com
2018-02-14 17:01:48

Linux的Bash命令行(A-Z排序)