Bash 脚本 - 并行解压并等待结束

Bash script - Parallel unzip and waiting for ending

我需要解压缩一些档案,我想加快这个过程。 这是我的一段脚本:

for archive in $path; do

    STEM=$(basename "${archive}" .gz)
    gunzip -c $archive > $here/$STEM

done

for file in `ls "$here"`; do
     ... processing ...
done

有没有办法一次解压多个(所有)档案并等待完成?

换句话说,我需要这样的东西:

for archive in $path; do

    ... parallel unzip ...

done

WAIT

for file in `ls "$here"`; do
     ... processing ...
done

谢谢

只需在 gunzip 后面加上一个符号:

for archive in $path; do

    STEM=$(basename "${archive}" .gz)
    gunzip -c $archive > $here/$STEM &

done

wait

您可以像这样使用 GNU Parallel 非常简洁和简单地完成它:

parallel 'gunzip -c {} > "$here/$(basename {} .gz)"' ::: $path

请使用复制一个小目录中的几个文件进行测试,直到你掌握它为止。

如果您有 10,000 个文件要解压缩,这不会突然启动 10,000 个 unzip 作业 - 相反,如果您有 8 CPU 个内核,它将 运行 8 unzip 一次处理,直到完成所有 10,000 个。您可以将一次作业的数量更改为固定数量,或可用 CPU 的某个百分比。

您还可以通过 parallel --progress ...parallel --bar ... 获得进度表。

你也可以问 GNU Parallel 告诉你它会做什么,使用 parallel --dry-run ....