异步执行bash convert命令

异步执行bash convert命令,bash,asynchronous,imagemagick,imagemagick-convert,gnu-parallel,Bash,Asynchronous,Imagemagick,Imagemagick Convert,Gnu Parallel,我有一个循环,循环浏览一堆需要用Imagemagick编辑的图像。问题是,在编辑下一幅图像之前,必须等待每幅图像被编辑,这很慢。我希望异步执行每个convert命令,而不是等待最后一个命令完成。bash可以这样做吗?以下是我的基本概述: for img in * do convert $img **more params here** done 我想异步执行convert命令。所以我可以一次转换所有的图像。bash是否可以做到这一点?如果您有许多映像,并行运行数百/数千个convert进程

我有一个循环,循环浏览一堆需要用Imagemagick编辑的图像。问题是,在编辑下一幅图像之前,必须等待每幅图像被编辑,这很慢。我希望异步执行每个convert命令,而不是等待最后一个命令完成。bash可以这样做吗?以下是我的基本概述:

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

我想异步执行convert命令。所以我可以一次转换所有的图像。bash是否可以做到这一点?

如果您有许多映像,并行运行数百/数千个
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 ...

如果您有GNU
xargs
,您可以使用它并行运行多个命令。查看这篇文章:你的系统是如何运行的?资源方面?它能够并行运行命令吗?将
convert$img**此处的更多参数**
替换为
convert$img**此处的更多参数**&
以转换所有并行命令。@老实说,我不知道如何检查。它后面有足够的马力it@AlexKonetchy:参考最简单的实现并行性的方法,如Cyrus在上面的注释中所述,或者如果您是更具体的工具,请使用第一条注释中共享的链接。不要使用
--progress
尝试
--bar
。看看你更喜欢哪一个。顺便说一句,这已经创造了奇迹。使用这种方法,我可以在大约2秒钟内转换200幅图像。GNU Parallel非常出色,值得@OleTange开发它。