Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何自动转换图像_Bash_Imagemagick Convert - Fatal编程技术网

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似乎不行,但我必须深入文档,向您展示一个报价,以确定确切的行为。