我需要解压缩一些档案,我想加快这个过程。 这是我的剧本:
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
由于
答案 0 :(得分:3)
你可以用这样的 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 ...
。
答案 1 :(得分:1)
在枪口之后放一个&符号:
for archive in $path; do
STEM=$(basename "${archive}" .gz)
gunzip -c $archive > $here/$STEM &
done
wait