固定长度的进度条、文件或字节计数,或者更好的是显示估计剩余时间的计时器将是理想的。
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 页面上有未发布的测试版,但我不想将我的数据委托给测试版。
答案1
如果您可以使用 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
可以将数据压缩到标准输出。因此,您可以将其与其他工具结合使用,例如pv
:
zip -qr - [folder] | pv -bep -s $(du -bs [folder] | awk '{print $1}') > [file.zip]
-bep
根据您的方便删除其中一个选项。
答案3
我已成功使用以下内容:
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 |
zip 递归到 [target_zip] 文件中,[folder_to_zip] 将 stderr 重定向到 stdout。请注意,stderr 将包含每个文件和目录一行正在处理。
pv -lep -s $(ls -Ral1 [folder_to_zip] | egrep -c '^[-/]') > /dev/null
pv
当文件名从 zip 输出时,通过管道插入到包含文件名的行中。pv
在行模式下操作(根据行数和大小计算进度也是预期的行数 – 请参阅PV 手册页 -l 选项)。
预期行的总大小是通过递归列出 (ls) [folder_to_zip] 并计算以“-”或“d”开头的行来收集的,即,所有文件和目录(记住目录以 '/' 开头)。
上面提供了准确的完成百分比,因为当所有文件和目录都已处理完毕时就达到了 100%。
pedroapero 答案的问题在于,进度是根据已处理(压缩)的字节数除以要处理(未压缩)的字节总数来计算的。因此,该过程将在 30% 左右完成(取决于压缩率)。
答案4
您可以-qq
向命令添加标志。这对我有用。
例子:
zip -r -qq out_chairs.zip out_chairs/