我正在使用脚本将我文件夹中的所有图像转换为翻页操作。脚本是这样的:
for f in *.jpg; do
new="${f%%.jpg}_flop.jpg";
convert "$f" -flop -quality 100 "$new";
done
现在我发现可能还有扩展名.JPG
的图片我想添加一个新的for循环,如下所示:
for f in *.JPG; do
new="${f%%.jpg}_flop.jpg";
convert "$f" -flop -quality 100 "$new";
done
我认为有一种忽略大小写的语法,这样我可以做一个循环而不是2,任何帮助?
此外,如果还有扩展程序.jpeg
或.JPEG
,是否也有这样的语法?
答案 0 :(得分:1)
你可以简单地做
for f in *.jpg *.JPG; do
...
如果您想要单个表达式,可以在Bash中使用extglob
扩展名。
set -o extglob
for f in *.@(JP@(|E)G|jp@(|e)g); do
...
要使globbing不区分大小写,您可以shopt -s nocaseglob
但是没有特定的语法可以使单个glob表达式不区分大小写。
你也可以使用稍微不精确的
for f in *.[Jj][Pp][Gg] *.[Jj][Pp][Ee][Gg]; do
...
不区分大小写。
答案 1 :(得分:0)
这些方面的东西:
#/bin/bash
shopt -s nullglob # don't give error messages if no matching files
shopt -s nocaseglob # ignore case
for f in *.jpg *.jpeg; do
new=${f/.[Jj][Pp][Ee][Gg]/} # strip extension
new=${new/.[Jj][Pp][Gg]/} # whether JPEG or jpg
new="$new_flop.jpg"
convert "$f" -flop -quality 100 "$new"
done
答案 2 :(得分:0)
我有一个类似的脚本:
for file in {*.jpg,*.JPG}; do
mv "$file" "old$file"
convert -resize 3000000@\> "old$file" -quality 80 "$file"
rm "old$file"
done
我还制作了一段视频来解释它: https://www.youtube.com/watch?v=AG0bItQLBdI
答案 3 :(得分:-1)
for f in `ls * | grep -i "jp[e]\?g$"`;do
new="${f%%.jpg}_flop.jpg";
echo convert "$f" -flop -quality 100 "$new";
done
正则表达式是你的朋友。