如何显示解压进度?

如何显示解压进度?

解压大文件时,如何显示进度、条形图或百分比?

unzip zipfile.zip没有显示任何进度信息?

答案1

无需安装任何其他东西,最简单的方法是让它为使用 awk 提取或处理的每个文件打印一个点。

unzip -o source.zip -d /destDirectory | awk 'BEGIN {ORS=" "} {print "."}'

如果它是一个较大的 zip 文件,那么您可以选择每 10 个或 20 个文件打印一个点,如下所示:

unzip -o source.zip -d /destDirectory | awk 'BEGIN {ORS=" "} {if(NR%10==0)print "."}'

只需将 NR%10 部分中的“10”更改为您想要的增量即可。

另外,您可以安装 pv 命令,它与 unzip 配合得不太好,但提供的一行视图还不算太糟糕。

安装pv:

sudo apt install pv

使用 pv 解压:

unzip -o source.zip -d /destDirectory | pv -l >/dev/null

显示的输出如下:

28.2k 0:00:03 [9.36k/s] [        <=>                       ]

但是,由于 zip 文件的处理方式,它不会像我们希望的那样以有意义的方式显示进度条。

答案2

显示压缩/解压进度的另一种方法是使用 7zip 程序。在最新版本 16.02(发布于 2016-05-21)中,它以百分比显示进度。

自 artuful/16.10 版本以来,Ubutuntu 存储库中提供了 16.02 版的软件包p7zip。较旧的 Ubuntu 版本在存储库中只有 p7zip 版本 9.20.1,没有进度指示器。我从 bionic 存储库手动安装了 Ubuntu xenial/16.04 中的 pzip 16.02 版本,似乎没有其他依赖项(p7zip、p7zip-full 和 p7zip-rar)。

7z x source.zip -o/destDirectory

请注意,“-o”和目标目录名称之间不能有空格。

答案3

你可能想要使用tqdm,这是一个 Python 库,但也有一个 CLI,并且将显示提取过程中的真实进度,而不仅仅是在一切完成后:

unzip zipfile.zip | tqdm > /dev/null

以百分比形式显示进度比较困难,因为不知道要打印的行数。可以unzip从输出中获取文件数:unzip -l zipfile.zip

n_files=`unzip -l zipfile.zip | tail -n 1 | xargs echo -n | cut -d' ' -f2`

然后您可能希望:

unzip -o zipfile.zip | tqdm --desc extracted --unit files --unit_scale --total $n_files > /dev/null

最终输出:

extracted: 100%|███████████████████████████████| 15126/15126 [00:00<00:00, 16218.28files/s]

但是 unzip 打印的输出可能不仅是解压后的文件名称,还可能包含其他一些操作(如压缩或链接内容),具体取决于 zip 文件的内容。因此,它n_files确实包含正确数量的文件,但步骤数量可能更多。一旦tqdm超过 100%,它将切换到默认进度输出,如上面的第一个示例所示。

Ubuntu 软件包名称目前为python3-tqdm。当然,man tqdm非常有帮助。

答案4

或者,您可以查看文件解压到的目标目录的大小。例如,您可以使用:

watch -n 60 du -sh dest_directory

写信给哪里dest_directory是哪里。unzip

-s用于显示尺寸,-h使其易于阅读。此外,此过程每秒重复一次60。您可以根据自己的设置进行更改。

因为它du循环调用(目录使用),所以它可能比其他答案效率低。但是,如果您使用unzip类似 的选项进行调用-q,这意味着unzip将不再写入stdout,因此您无法基于此使用其他答案,那么它可能是您唯一的选择。它也可以更快,因为当您有大量小文件时,-q它将提高速度。unzip

相关内容