Ubuntu将所有图像隐藏在一个文件夹中
我正在使用脚本将文件夹中的所有图像转换为flop操作。脚本如下所示: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 现在我发现可能还有扩展名为
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;完成后,我得到的只是没有这种扩展类型的错误。