Ubuntu将所有图像隐藏在一个文件夹中

Ubuntu将所有图像隐藏在一个文件夹中,ubuntu,imagemagick-convert,Ubuntu,Imagemagick Convert,我正在使用脚本将文件夹中的所有图像转换为flop操作。脚本如下所示: for f in *.jpg; do new="${f%%.jpg}_flop.jpg"; convert "$f" -flop -quality 100 "$new"; done for f in *.JPG; do new="${f%%.jpg}_flop.jpg"; convert "$f" -flop -quality 100 "$new"; done 现在我发现可能还有扩展名为

我正在使用脚本将文件夹中的所有图像转换为flop操作。脚本如下所示:

for f in *.jpg; do
    new="${f%%.jpg}_flop.jpg";
    convert "$f" -flop -quality 100 "$new";
 done
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
for f in *.JPG; do
    new="${f%%.jpg}_flop.jpg";
    convert "$f" -flop -quality 100 "$new";
 done
我认为有一种语法可以忽略这个案例,这样我可以做一个循环而不是2个,有什么帮助吗


此外,如果还有扩展名.jpeg或.jpeg,是否也有相应的语法?

大致如下:

#/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

正则表达式是您的朋友。

我有一个脚本,可以执行类似的操作:

for file in {*.jpg,*.JPG}; do
  mv "$file" "old$file"
  convert -resize 3000000@\> "old$file" -quality 80 "$file"
  rm "old$file"
done
我还制作了一个视频来解释:

您只需

for f in *.jpg *.JPG; do
    ...
如果需要单个表达式,可以在Bash中使用扩展

set -o extglob
for f in *.@(JP@(|E)G|jp@(|e)g); do
    ...
要使globbing不区分大小写,您可以,但没有特定的语法使单个glob表达式不区分大小写

您也可以使用稍微不精确的

for f in *.[Jj][Pp][Gg] *.[Jj][Pp][Ee][Gg]; do
    ...

不敏感地匹配大小写。

flop\u all\u images.sh:1:flop\u all\u images.sh:shopt:not found flop\u all\u images.sh:2:flop\u all\u images.sh:shopt:not found flop\u all\u images.sh:4:flop\u all\u images.sh:糟糕的替换如何启用shopt?抱歉,这是一个抨击。你需要/bin/bash作为第一行。我添加了它,但仍然说shopt:notfound。但换人还是很糟糕。试着做第一行/bin/bash-xv并再次运行它以调试它意味着您的bash没有象征性地链接到其他shell,例如fish或sh,因此这也不是问题的原因。我第一次丢失了backticks。这是一篇有趣的文章,我想我们确实必须防止疯狂的文件名。最后一个选项有效,但是:1。我对扩展有一些问题:如果ext不是new=${f%%.here}\u flop.jpg之后提到的ext;它正在转换为文件file.here\u flop.jpg。2.set-o extglob和shopt不适用于我的案例,我不知道为什么会有任何建议?。3.如果我没有像.jpeg这样的ext文件,它会打印一些错误,但它会对其他文件进行转换,我可以推测您正在使用/shebang行上的bin/sh,该行运行不同的shell,或者在禁用了所有特定于Bash的扩展的某些安装Bash上。{*.jpg,*.jpg}使echo-to-print转换为*.jpg,转换为*.jpg,_-flop.jpg等脚本,请参见其他注释。该命令类似于{*.jpg,*.jpg}中的文件;do new=${f%%.jpg}\u flop.jpg;转换$f-flop-quality 100$new;完成了,但我已将其更改为*[Jj][Pp][Gg].[Jj][Pp][Ee][Gg]中的for f;donew=${f%%.[Jj][Pp][Gg]}\u flop.jpg;转换$f-flop-quality 100$new;完成后,我得到的只是没有这种扩展类型的错误。