当我使用zip时,如何在不淹没命令行的情况下显示总体进度?


25

固定长度的进度条,文件或字节数,或者最好是计时器,它显示估计的剩余时间,将是理想的选择。

zip的标准行为似乎是为每个处理的文件打印一行,但是当我压缩成千上万个文件时,我不希望该信息过载。我想估计要花多长时间。

我尝试将-q--quiet)选项与-dg--display-globaldots)组合使用,但是只是将多行点填充到stdout中,并且没有给出有用的指示。

我也-qdgds 10m按照手册页中所述尝试过,但是得到了相同的结果。

然后,我尝试了-db--display-bytes)和-dc--display-counts),但似乎没有全局选项,因此它再次为每个文件名打印它。

最后,我与-qlike 一起尝试过-qdbdc,但是什么也没输出。

有趣的是,我在info-zip网站上找到了一个手册页,其中提到了-de--display-est-to-go)选项,该选项应“显示完成归档操作的时间的估算值”。

听起来完全像我想要的,但是问题是我的版本zip没有该功能。我正在使用Ubuntu 14.04.1 64位,bash-4.3.30(1)和zip-3.00。根据Wikipedia的介绍,这是zip的最新稳定版本。

info-zip sourceforge页面上有未发布的beta版本,但我不想将我的数据委托给beta版本。


将输出记录到文件中,并使用来提供高级信息tee。开始压缩之前,使文件的总数(含lsfind -type f),虽然它是荏苒,阅读它已经拥有(与处理的文件的行数的日志文件grep的行权来看待,而wc -l对于线计数),因此您的高级信息将显示“ 234/76438个文件已处理”之类的内容;
水瓶座力量

您可以通过考虑文件总大小并检查已处理文件的大小来确定时间;但是...即使是相同大小的文件也需要花费不同的时间来处理,因此这总是一个疯狂的猜测...
Aquarius Power

我不知道在制作ZIP文件时是否可以使用stdin,但是如果gzip可以,则可以执行以下操作pv /path/to/file | gzip > /path/to/file.gz
DopeGhoti

Answers:


11

zip可以将数据压缩到标准输出。因此,您可以将其与其他工具结合使用pv

zip -qr - [folder] | pv -bep -s $(du -bs [folder] | awk '{print $1}') > [file.zip]

-bep为方便起见,请删除其中一个选项。


谢谢你!我在Mac上执行此操作(酿造pv,brew安装coreutils,并用gdu替换du)。
杰夫(Jeff)

6

如果您可以使用7z:

7z a output.zip folder/

这将为您提供如下的进度条:

Open archive: test.zip
--
Path = test.zip
Type = zip
Physical Size = 232039663

Scanning the drive:
3 folders, 2401 files, 238122225 bytes (228 MiB)

Updating archive: test.zip

Items to compress: 2404

 16% 279 U folder/file.txt  

2

我已成功使用以下内容:

zip -r [target_zip] [folder_to_zip] 2>&1 | 
pv -lep -s $(ls -Rl1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null

下面对此进行说明:

zip -r [target_zip] [folder_to_zip] 2>&1 |

[folder_to_zip]递归压缩到[target_zip]文件中,将stderr重定向到stdout。请注意,对于要处理的每个文件和目录,stderr将包含一行

pv -lep -s $(ls -Ral1 [folder_to_zip] | egrep -c'^ [-/]')> / dev / null

将带有文件名的行从zip中输出到pv中。pv在行模式下运行(基于行数和大小的计数进度也以预期的行数为准-请参见PV手册页-l选项)。

通过递归列出(folder_to_zip)(ls)并计算以'-'或'd'开头的行(即所有文件和目录(记住目录以'/'开头列出))来收集期望的行的总大小。

当处理完所有文件和目录时,以上内容提供了准确的完成百分比,因为达到了100%。

pedroapero答案的问题是,进度是根据要处理(压缩)的字节数与要处理(未压缩)的字节总数之比计算得出的。结果,该过程将以大约30%的速度完成(取决于压缩率)。

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.