如何自动转换图像
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
命令的结束。
我可以这样转换图片:
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
命令的结束。