如何自动转换图像

How to automate conversion of images

我可以这样转换图片:

convert -resize 50% foo.jpg foo_50.jpg

如何自动执行这样的命令来转换文件夹中的所有图像?

您可以假设每张图片都有 .jpg 扩展名。

最好有一个易于适应的解决方案,可以自动转换工作目录子目录中的所有图像。

您可以使用带有模式扩展的 for 循环:

for img in */*.jpg ; do
    convert -resize 50% "$img" "${img%.jpg}"_50.jpg
done

${variable%pattern} 删除 $variable 右侧的模式。

您也可以使用 ls+awk 尝试这个(不太优雅的)单行代码:

ls *.jpg | awk -F '.' '{print "convert -resize 50% "[=10=]" ""_50.jpg"}' | sh

这假定所有 .jpg 文件都在当前目录中。在 运行 之前,尝试删除 | sh 并查看屏幕上打印的内容。

您可以使用 find -exec:

find -type f -name '*.jpg' -exec \
bash -c 'convert -resize 50% "[=10=]" "${0%.jpg}"_50.jpg' {} \;

find -type f -name '*.jpg'找到所有.jpg个文件(包括子目录下的文件)交给-exec后的命令,可以用{}引用。

因为要使用参数展开,不能直接使用-exec convert -resize;我们必须调用 bash -c 并提供 {} 作为它的位置参数([=19=] 在命令中)。 \; 标志着 -exec 命令的结束。