pv(进度条)和gzip


10

为什么这不可能呢?

pv ${dest_file} | gzip -1

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%

这有效

pv ${file_in} | tar -Jxf - -C /outdir

1
您想达到什么目的?您是否阅读pvgzip命令的文档?
雅库耶2015年

Answers:


24

您要实现的目标是查看压缩过程的进度条。但无法使用pv。它仅显示传输进度,您可以通过以下方式实现此目的(无论如何,这是google中的第一个链接):

pv input_file | gzip > compressed_file

进度条将快速运行,然后将等待压缩,使用不再可见pv

但是您可以用其他方式查看输出流,在这里,您将无法看到实际进度,因为pv不知道压缩文件的实际大小:

gzip input_file | pv > compressed_file

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

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

进度栏无法正常使用gzip input_file | pv > compressed_file
clarkk 2015年

是的,但是它不知道压缩文件的整体大小,因此它只是从侧面扫描到侧面。第一个可能更好。
雅库耶2015年

进度条对我来说运行不快。
mikezter 18'Apr

gzip -c需要将输出发送到stdout以便将其传递到pv,否则进度条将无法工作,因为没有数据去pv :)
David Gardner

谢谢你的提示!您也可以使用来实现此目的mysqldump ... | gzip | pv > output.sql.gz
jevon '18

4

是的,有可能使用文件的行而不是字节。您会获得足够准确的进度条:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file

1

您可以改用7z获得百分比进度:

$ 7z a spaCy.tar.gz spaCy.tar 

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (906E9),ASM,AES-NI)

Open archive: spaCy.tar.gz
--
Path = spaCy.tar.gz
Type = gzip
Headers Size = 20

Scanning the drive:
1 file, 326451200 bytes (312 MiB)

Updating archive: spaCy.tar.gz

Items to compress: 1

 32% U spaCy.tar   
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.