我已经编写了一个脚本将递归 .jpg 文件转换为其他大小:
echo $re
mkdir "$re"_tmp
for a in *.jpg ; do convert "$a" -resize $re "$re""_tmp/${a%.*} ["$re"].jpg" ; done
我想集成多扩展支持:png、bmp 等,更好的是:
FILEFORMAT="jpg, JPG, png, PNG, bmp, BMP"
有想法建造它吗?
PS:变量re是新的尺寸1024x768(或800x600等)
答案1
如果我理解正确的话,您想要处理具有其他扩展名的文件,而不仅仅是jpg
.所以你可以尝试:
for a in *.{jpg,JPG,png,PNG,bmp,BMP}; do
printf '%s\n' "$a"
# do your stuff here
done
{...}
bash 功能称为大括号扩展。
答案2
您可以使用多个以空格分隔的 GLOB 表达式:
for a in *.[jJ][pP][gG] \
*.[jJ][pP][eE][gG] \
*.[pP][nN][gG] \
*.[bB][mM][pP]
do
echo "$a" "$re/$a"
done
# or inline
for a in *.[jJ][pP][gG] *.[jJ][pP][eE][gG] *.[pP][nN][gG] *.[bB][mM][pP] ; do echo "$a" "$re/$a"; done
不确定它是否兼容 POSIX,但我相信是的。
答案3
这是 POSIX 投诉变体:
for a in *.jp* *.JP*; do
[ -f "$a" ] || continue
echo "Processing $a"
done
- 在 POSIX 中,您可以放置多个用空格分隔的 GLOB
- 在现实生活中,扩展名是小写
jpg
或大写的以太JPG
,但不是混合大小写。 - 如果没有任何
JPG
文件,那么 glob 将不会被扩展,并且 vara
将有价值*.JP*
。您必须通过检查 hte 文件是否存在来过滤掉它[ -f "$a" ]