pv(进度条)和 gzip

cla*_*rkk 11 command-line gzip

为什么这是不可能的?

pv ${dest_file} | gzip -1
Run Code Online (Sandbox Code Playgroud)

pv 是一个进度条

错误

gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
   0 B 0:00:00 [   0 B/s] [>                                   ]  0%
Run Code Online (Sandbox Code Playgroud)

这有效

pv ${file_in} | tar -Jxf - -C /outdir
Run Code Online (Sandbox Code Playgroud)

Jak*_*uje 27

你想要实现的是查看压缩过程的进度条。但不可能使用pv. 它只显示传输进度,您可以通过这样的方式实现(无论如何,它是谷歌中的第一个链接):

pv input_file | gzip > compressed_file
Run Code Online (Sandbox Code Playgroud)

进度条会跑得很快,然后会等待压缩,这在使用pv.

但是你可以反过来看输出流,bot在这里你将无法看到实际进度,因为pv不知道压缩文件的实际大小:

gzip input_file | pv > compressed_file
Run Code Online (Sandbox Code Playgroud)

到目前为止,我发现的最好的是来自commandlinefu 的,即使有速率限制和目录压缩:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Run Code Online (Sandbox Code Playgroud)


小智 5

是的,有点可能使用文件的行,而不是字节。你会得到一个足够准确的进度条:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,但可能会很慢。就我而言,对于 68 GB 文件,“wc”部分花费了 45 分钟,而实际的“cat”/“gzip”(然后带有进度条)花费了 1 小时,所以时间几乎增加了一倍。 (2认同)