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 ...
.
我需要解压缩一些档案,我想加快这个过程。 这是我的一段脚本:
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 ...
.