Bash 如何自动转换图像
我可以转换如下图像:Bash 如何自动转换图像,bash,imagemagick-convert,Bash,Imagemagick Convert,我可以转换如下图像: 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}从$
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的右侧删除模式。您可以在模式扩展中使用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% "$0" "$1"_50.jpg"}' | sh
这假定所有.jpg文件都在当前目录中。运行此操作之前,请尝试移除|sh
,并查看屏幕上打印的内容。您也可以使用ls+awk尝试此(不太优雅的)一行:
ls *.jpg | awk -F '.' '{print "convert -resize 50% "$0" "$1"_50.jpg"}' | sh
这假定所有.jpg文件都在当前目录中。运行此操作之前,请尝试删除
|sh
并查看屏幕上打印的内容。您可以使用查找-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
命令的结束。您可以使用查找-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
命令的结束。非常感谢!这正是我想要的,但我无法正确地进行模式扩展。你在最后一句中的解释也帮助我理解了我做错了什么。这只会在子目录中找到文件,并且只有一个级别的深度-或者我缺少了一些shopt
设置吗?shopt-s globstar;对于**/*.jpg中的img,我很满意。非常感谢!这正是我想要的,但我无法正确地进行模式扩展。你在最后一句中的解释也帮助我理解了我做错了什么。这只会在子目录中找到文件,并且只有一个级别的深度-或者我缺少了一些shopt
设置吗?shopt-s globstar;对于**/*.jpg中的img,我可以使用它。一个简单的问题是:当新生成的文件也是.jpg
时,它不会导致递归吗?是先找到整个列表,还是分批找到文件?对我来说,它似乎可以处理约200个文件。@anishsane似乎不行,但我必须深入文档,向您展示一个引号,以确定确切的行为。一个简单的问题:当新生成的文件也将是.jpg
时,它不会导致递归吗?是先找到整个列表,还是分批找到文件?对我来说,它似乎可以处理约200个文件。@anishsane似乎不行,但我必须深入文档,向您展示一个报价,以确定确切的行为。