我可以像这样转换图像:
convert -resize 50% foo.jpg foo_50.jpg
如何自动执行此命令以转换文件夹中的所有图像?
您可以假设每张图片都有.jpg
个扩展名。
最好能够轻松适应自动转换工作目录子目录中所有图像的解决方案。
答案 0 :(得分:3)
您可以使用带有模式扩展的for循环:
for img in */*.jpg ; do
convert -resize 50% "$img" "${img%.jpg}"_50.jpg
done
${variable%pattern}
从$变量的右侧删除模式。
答案 1 :(得分:1)
您可以使用find -exec
:
find -type f -name '*.jpg' -exec \
bash -c 'convert -resize 50% "$0" "${0%.jpg}"_50.jpg' {} \;
find -type f -name '*.jpg'
找到所有.jpg
个文件(包括子目录中的文件)并将其交给-exec
后的命令,可以使用{}
引用它。
因为我们想要使用参数扩展,所以我们不能直接使用-exec convert -resize
;我们必须调用bash -c
并提供{}
作为它的位置参数(命令内的$0
)。 \;
标记-exec
命令的结束。
答案 2 :(得分:0)
你也可以尝试使用ls + awk:
这个(不那么优雅)的单线程ls *.jpg | awk -F '.' '{print "convert -resize 50% "$0" "$1"_50.jpg"}' | sh
这假设所有.jpg文件都在当前目录中。在运行此操作之前,请尝试删除| sh
并查看屏幕上显示的内容。