我有一个循环遍历一堆我需要用Imagemagick编辑的图像。麻烦的是,在编辑下一个图像之前必须等待编辑每个图像很慢。我想异步执行每个转换命令,而不是等待最后一个完成。这可以用bash吗?以下是我所拥有的基本概述:
for img in *
do
convert $img **more params here**
done
我想异步执行转换命令。所以我可以一次转换所有图像。这可能与bash一起使用吗?
答案 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 ...