异步执行bash转换命令

时间:2017-03-08 06:26:12

标签: bash asynchronous imagemagick imagemagick-convert gnu-parallel

我有一个循环遍历一堆我需要用Imagemagick编辑的图像。麻烦的是,在编辑下一个图像之前必须等待编辑每个图像很慢。我想异步执行每个转换命令,而不是等待最后一个完成。这可以用bash吗?以下是我所拥有的基本概述:

for img in *
do
  convert $img **more params here**
done

我想异步执行转换命令。所以我可以一次转换所有图像。这可能与bash一起使用吗?

1 个答案:

答案 0 :(得分:3)

如果您有很多图片,并行运行数百/数千个convert进程并不会很好用,那么 GNU Parallel 会更好CPU内核繁忙而不会使系统过载 - 因此,如果您有8个内核,它将一次执行8个映像(尽管您可以更改它)。

因此,如果您想将目录中的所有JPG图片调整为原始尺寸的一半,并将其重命名为resized-XYZ.jpg

parallel convert {} -resize 50% resized-{} ::: *.jpg

如果您想要执行所有JPG个文件和PNG文件,并在运行时查看进度表:

parallel --progress convert {} -resize 50% resized-{} ::: *.jpg *.png

如果您想一次只做8个,请使用:

parallel -j8 ....

如果你想看看命令将要做什么,而不实际做任何事情:

parallel --dry-run ...