PV(1) User Commands PV(1) (NAME) pv - (SYNOPSIS) pv [OPTION]... [FILE]... pv [OPTION]... -d|--watchfd PID[:FD]|=NAME|@LISTFILE... pv -R|--remote PID [OPTION]... pv -Q|--query PID [OPTION]... pv [OPTION]... -M|--monitor SIDE -- COMMAND [ARGS]... (DESCRIPTION) (pipeline) ( ) (ETA). (buffer) (cache) . FILE . FILE FILE "-" . "--watchfd" . "--monitor" . (OPTIONS) pv "--progress" "--timer" "--eta" "--rate" "--bytes" . . -p, --progress . "--size" "--gauge" . -t, --timer . pv . -e, --eta ETA ( ). . "ETA" . . -I, --fineta ETA . . "FIN" ( ) . "--eta" . -r, --rate . . "[]" . -a, --average-rate . ( "--average-rate-window" ). "()" . -b, --bytes . . -T, --buffer-percent . . "--no-splice" . "{}" . -A NUM, --last-written NUM NUM . "--no-splice" . -F FORMAT, --format FORMAT FORMAT . FORMATTING . -n, --numeric . dialog(1) . "--numeric" "--force" . "--numeric" "--bytes" . "--line-mode" "--bytes" . "--rate" ( "--bytes" / ). "--timer" . "--numeric" "--format" . "--numeric" : "%t %b %r %{progress-amount-only}" ( "%{progress-amount-only}" ). -q, --quiet . "--rate-limit" . -8, --bits . "B" "b" . -k, --si . . -W, --wait (ETA). (pipe ) gpg(1) "mysql -p" . -D SEC, --delay-start SEC SEC . SEC "0.5" . -s SIZE, --size SIZE SIZE (ETA). "K" "M" "G" "T" (*1024) . "--si" (*1000) . SIZE "@" @ "du --apparent-size -b". -g, --gauge . -l, --line-mode ( ). "--size" . "--size" " " ( ) . (pipes) (non-regular) . -0, --null (null) . "--line-mode" . -i SEC, --interval SEC SEC . . SEC "0.1" . -m SEC, --average-rate-window SEC SEC ETA. . . -w WIDTH, --width WIDTH WIDTH ( ). . -H HEIGHT, --height HEIGHT HEIGHT ( ). . -N NAME, --name NAME NAME . "--cursor" pv . -u STYLE, --bar-style STYLE "--progress" "--format" "%{progress}" "%{progress-bar-only}" STYLE. STYLE plain () block granular shaded . FORMATTING . -x SPEC, --extra-display SPEC SPEC . SPEC . windowtitle window xterm processtitle proctitle process proc ps(1) . . "-x 'window,process:%t %b %r'" . -v, --stats . ( "--bits" ). -f, --force . pv . . -c, --cursor carriage return. pv . : pv --cursor --name input file.gz | gzip -d | pv --cursor --name output > file "--name" . -o FILE, --output FILE FILE . (truncate) . -L RATE, --rate-limit RATE RATE . "--size" . . 0 "--remote" . -B BYTES, --buffer-size BYTES BYTES . "--size" . ( 512KiB) 400KiB . macOS . "--no-splice" . -C, --no-splice splice(2) copy_file_range(2) . splice(2) copy_file_range(2) "--buffer-percent" "--last-written" "--buffer-size" "--no-splice" . (sparse) splice(2) copy_file_range(2) "--sparse" "--no-splice" . "--no-splice" . splice(2) copy_file_range(2) . -J BYTES, --pipe-buffer-size BYTES BYTES . . (pipe) . -E, --skip-errors . (null) . . "dd conv=sync,noerror" . "--skip-errors" . -Z BYTES, --error-skip-block BYTES "--skip-errors" BYTES . . "--size" . "--skip-errors" (block device) "--skip-errors --error-skip-block 4K" . . -S, --stop-at-size "--size" . -Y, --sync sync(2) fdatasync(2) . . "--sync" . -K, --direct-io O_DIRECT . . (memory alignment) "Invalid argument" pv. . -O, --sparse (seek) (sparse) . "--no-splice" . (seekable) "--no-splice" . -X, --discard . /dev/null write(2) . -U FILE, --store-and-forward FILE - FILE FILE . FILE "-" pv . . "quick | pv -U - | slow" quick (ETA) slow . -d, --watchfd PID[:FD]|=NAME|@LISTFILE... FD PID . - - . PID FD . NAME <<=>> pgrep(1) . LISTFILE <<@>> . . pv FD / PID ( FD ) . -R PID, --remote PID pv PID . "pv --rate-limit 123K" 9876 "pv --remote 9876 --rate-limit 321K" 9876 123KiB 321KiB . "--cursor" "--line-mode" "--force" "--delay-start" "--skip-errors" "--stop-at-size". -Q PID, --query PID pv PID . - "--line-mode" "--null" "--average-rate-window". . -M SIDE, --monitor SIDE SIDE "in" "out" "both" . pv "--" . "both" SIDE . pv . "pv --cursor --monitor both -- gzip -9" "pv --cursor | gzip -9 | pv --cursor" . "--format" "--name" . "--format" SIDE "both" . "0" "1" "2" "in" "out" "both" . "--store-and-forward" . -P FILE, --pidfile FILE pv FILE . pv . pv FILE - pv - . -h, --help . -V, --version . "--format" "--extra-display" : %p, %{progress} ( ). "--progress". "%20p" "%20{progress}". %{progress-bar-only} . . %{progress-amount-only} ( "--gauge" ). %{bar-plain} . . %{bar-block} . . UTF-8 . %{bar-granular} / . "%{bar}" . UTF-8 . %{bar-shaded} . "%{bar}" . UTF-8 . %t, %{timer} . "--timer". %e, %{eta} (ETA). "--eta". %I, %{fineta} . "--fineta". %r, %{rate} . "--rate". %a, %{average-rate} . "--average-rate". %b, %{bytes}, %{transferred} ( "--line-mode" ). "--bytes". "--bits" "%b" . %{ratio} "--monitor both". %T, %{buffer-percent} . "--buffer-percent" "--no-splice" . splice(2) "{----}" splice(2) "{-||-}" copy_file_range(2) "{--->}" . %nA, %n{last-written} n ( "%16A" ). splice(2) copy_file_range(2) . %nL, %n{previous-line} n ( "%40L" ). n . splice(2) copy_file_range(2) . %N, %{name} "--name". ":" . %{sgr:colour,...} ECMA-48 SGR (Select Graphic Rendition) colour,... console_codes(4) . . : reset none black red green brown yellow blue magenta cyan white fg-black fg-red fg-green fg-brown fg-yellow fg-blue fg-magenta fg-cyan fg-white fg-default bg-black bg-red bg-green bg-brown bg-yellow bg-blue bg-magenta bg-cyan bg-white bg-default bold dim italic underscore underline blink reverse no-bold no-dim no-italic no-underscore no-underline no-blink no-reverse. "fg-" () "bg-" . "%{sgr:green,bold}TEXT%{sgr:reset}" TEXT . %% "%". . "%b %t %r %p %e". : pv -ptebar . pv -betlap . pv -btrpg - . ( ). pv -t - "sleep 10m | pv -t". pv -pterb : . macOS "--buffer-size 1024" . nc(1): pv file | nc -w 1 somewhere.com 3000 pv: cat file | pv --size 12345 | nc -w 1 somewhere.com 3000 tar.gz: tar cf - directory/ \ | pv --size $(du -sb directory/ | awk '{print $1}') \ | gzip -9 \ > out.tar.gz : tar cf - directory/ \ | pv --size @directory/ \ | gzip -9 \ > out.tar.gz : pv -EE /dev/your/disk/device > disk-image.img : pv disk-image.img > /dev/your/disk/device : pv < /dev/zero > /dev/your/disk/device pv "--stop-at-size" . ( Linux macOS): 1234: pv --watchfd 1234:3 ( Linux macOS): 1234: pv --watchfd 1234 : producer | pv --quiet --rate-limit 1M | consumer : pv --no-splice --format '%a %p : %L' big.log | processing-script JSON: pv --numeric --format '{"elapsed":%t,"bytes":%b,"rate":%r,"percentage":%{progress-amount-only}}' big.log | processing-script "--remote" "--query" "--pidfile" "--monitor" . (bitmask) : 2 stat(2) . 4 . 8 . 16 . 32 . 64 . . (ENVIRONMENT) pv : HOME . "--remote" "--query" pv : /run/user/UID/ ( UID ) $HOME/.pv/ . TMPDIR, TMP tty "--cursor". TMPDIR . TMP . /tmp . (NOTES) bash(1) zsh(1) "<(pv filename)" . "--force" . pv (pipeline) 5.8 zsh (builtins) zsh pv . : pv InputFile | { while read -r line; do sleep 0.1; done; } (subshell) : pv InputFile | ( while read -r line; do sleep 0.1; done; ) issue #105 . "--remote" "--query" /run/user// $HOME/ . "--size" "--watchfd PID" "--watchfd PID:FD" . (block device) pv "--size" "--stop-at-size" . "%nA" "%nL" "%nL" . "--size" "--buffer-size" "--pipe-buffer-size" "--error-skip-block" "--size 1.5G" "--size 1536M" . "--rate-limit" . "--interval" "--delay-start" . "--last-written" "--width" "--height" "--average-rate-window" "--remote" "--query" . "--sparse" (null bytes) ls(1) pv . (sparse) . pv . (SEE ALSO) cat(1), splice(2), copy_file_range(2), fsync(2), fdatasync(2), open(2) ( O_DIRECT) console_codes(4) (COPYRIGHT) (C) 2002-2008, 2010, 2012-2015, 2017, 2021, 2023-2026 Andrew Wood. GPLv3+: GNU GPL . : . . ACKNOWLEDGEMENTS . pv-1.11.0 2026-06-11 PV(1)