Ubuntu转换文件夹中的所有图像

时间:2014-10-06 09:10:02

标签: ubuntu imagemagick-convert

我正在使用脚本将我文件夹中的所有图像转换为翻页操作。脚本是这样的:

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,是否也有这样的语法?

4 个答案:

答案 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

正则表达式是你的朋友。