异步执行 bash 转换命令
Executing bash convert commands asynchronously
我有一个循环,循环处理我需要使用 Imagemagick 编辑的一堆图像。麻烦的是,在编辑下一张之前必须等待每张图像都被编辑,这很慢。我想异步执行每个转换命令,而不是等待最后一个到 finish.Is 这可能用 bash?这是我所拥有的基本概述:
for img in *
do
convert $img **more params here**
done
我想异步执行转换命令。所以我可以一次转换所有图像。 bash 这可能吗?
如果您有很多图像,运行宁 hundreds/thousands 的 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 ...
我有一个循环,循环处理我需要使用 Imagemagick 编辑的一堆图像。麻烦的是,在编辑下一张之前必须等待每张图像都被编辑,这很慢。我想异步执行每个转换命令,而不是等待最后一个到 finish.Is 这可能用 bash?这是我所拥有的基本概述:
for img in *
do
convert $img **more params here**
done
我想异步执行转换命令。所以我可以一次转换所有图像。 bash 这可能吗?
如果您有很多图像,运行宁 hundreds/thousands 的 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 ...