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



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

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

谢谢

你可以像这样使用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 ...

只需在枪拉链后放一个 & 符号:

for archive in $path; do
STEM=$(basename "${archive}" .gz)
gunzip -c $archive > $here/$STEM &
done
wait

最新更新