bug*_*bug 39 bash terminal zip progress-information
一个固定长度的进度条、一个文件或字节数,或者更好的是一个显示估计剩余时间的计时器是理想的。
zip
的标准行为似乎是为每个处理的文件打印一行,但是当我压缩数千个文件时,我不希望信息过载。我想估计需要多长时间。
我尝试将-q
( --quiet
) 选项与-dg
( --display-globaldots
)结合使用,但这只是用多行点填充标准输出,并没有给出任何有用的指示。
我也-qdgds 10m
按照手册页中的说明进行了尝试,但得到了相同的结果。
然后我尝试了-db
( --display-bytes
) 和-dc
( --display-counts
) 但似乎没有全局选项,所以它再次为每个文件名打印它。
最后,我与-q
like一起尝试了它-qdbdc
,但它什么也没输出。
有趣的是,我在 info-zip 站点上找到了一个手册页,其中提到了一个-de
( --display-est-to-go
) 选项,该选项应该“显示完成存档操作的估计时间”。
这听起来和我想要的完全一样,但问题是我的版本zip
没有那个功能。我使用的是 Ubuntu 14.04.1 64 位、bash-4.3.30(1) 和 zip-3.00。根据维基百科,这是 zip 的最新稳定版本。
info-zip sourceforge 页面上有未发布的测试版,但我不想将我的数据委托给测试版。
ped*_*ero 20
zip
可以将数据压缩到标准输出。因此,您可以将其与其他工具结合使用,例如pv
:
zip -qr - [folder] | pv -bep -s $(du -bs [folder] | awk '{print $1}') > [file.zip]
Run Code Online (Sandbox Code Playgroud)
-bep
为方便起见,删除其中一个选项。
qwr*_*qwr 14
如果您可以使用 7z:
7z a output.zip folder/
Run Code Online (Sandbox Code Playgroud)
这会给你一个这样的进度条:
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
Run Code Online (Sandbox Code Playgroud)
小智 5
我已经成功地使用了以下内容:
zip -r [target_zip] [folder_to_zip] 2>&1 |
pv -lep -s $(ls -Rl1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null
Run Code Online (Sandbox Code Playgroud)
这解释如下:
zip -r [target_zip] [folder_to_zip] 2>&1 |
Run Code Online (Sandbox Code Playgroud)
将 [folder_to_zip] 递归压缩到 [target_zip] 文件中,将 stderr 重定向到 stdout。请注意,stderr 将为正在处理的每个文件和目录包含一行。
pv -lep -s $(ls -Ral1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null
Run Code Online (Sandbox Code Playgroud)
pv
当它们从 zip 输出时,将它们导入到带有文件名的行中。pv
在行模式下运行(基于行和大小的计数进度也是预期的行数 - 请参阅PV 手册页 -l 选项)。
通过递归列出 (ls) [folder_to_zip] 并计算以 '-' 或 'd' 开头的行,即所有文件和目录(记住目录以 '/' 开头)。
以上提供了准确的完成百分比,因为在处理完所有文件和目录后达到 100%。
pedroapero 答案的问题在于,进度是根据已处理(压缩)的字节数与要处理(未压缩)的总字节数来计算的。因此,该过程将在 30% 左右完成(取决于压缩率)。