我正在尝试将一堆图像转换为可能位于多个子目录中的缩略图,并将图像的副本保存为子目录中的缩略图,但我搞不懂语法。欢迎提供任何建议。
convert test/*/*.jpg -50x50 test/*/*_thumb.jpg
答案1
您应该使用 find 来查找您需要的所有文件。
find test -iname *.jpg -exec convert {} -resize 50x50 {}_thumb \;
然后您应该使用以下命令将名称为 *.jpg_thumb 的文件重命名为 *_thumb.jpg:
find -name *.jpg_thumb -exec rename -e 's/^(.*)(.jpg)(_thumb)$/\1\3\2/' '{}' \;
请注意,-50x50 不是转换的合法参数。您应该像上例一样使用-resize
带值的参数。50x50
答案2
shell 循环还应该执行以下操作:
for file in test/*/*.jpg ; do
new=${file%.jpg}_thumb.jpg
convert "$file" -resize 50x50 "$new"
done
或者使用 Bash 的globstar
,如果文件可以位于任意目录级别,则效果会更好:
shopt -s globstar
for file in test/**/*.jpg ; do ...
${file%.jpg}
获取变量的值并从末尾file
删除字符串。(参见.jpg
BashGuide 参数扩展)