gpt4 book ai didi

bash - 改进 for 循环的执行

转载 作者:行者123 更新时间:2023-11-29 09:23:38 26 4
gpt4 key购买 nike

我已经完成了一个小批量脚本来调整(动态)一些图像的大小:

for a in *.{png,PNG,jpg,JPG,jpeg,JPEG,bmp,BMP} ;
do convert "$a" -resize $re "$re""_tmp/${a%.*} ["$re"].jpg" ; done

它运行。

问题:如果在目录中只有(一个实例).png 文件,脚本会运行但会显示一些错误,因为没有其他文件扩展名(PNG,jpg ,JPG,jpeg,JPEG,bmp,BMP)

改进它的最佳方法是什么?将 stderr 重定向到 /dev/null?任何想法?我想检查 ($?) 脚本的退出状态,添加 if/then 以显示脚本是否正确运行。

最佳答案

我想到了两个简单的解决方案。

shopt builtin 使用 nullglob 选项因此不匹配的 glob 会消失,而不是保留文字。

$ ls *.foo
ls: *.foo: No such file or directory
$ echo one *.foo two
one *.foo two
$ shopt -s nullglob
$ echo one *.foo two
one two

所以你的脚本会变成。

shopt -s nullglob
for a in *.{png,PNG,jpg,JPG,jpeg,JPEG,bmp,BMP} ;
do convert "$a" -resize $re "$re""_tmp/${a%.*} ["$re"].jpg" ; done

或者在使用 convert 之前测试文件是否存在。

for a in *.{png,PNG,jpg,JPG,jpeg,JPEG,bmp,BMP} ;
do [ -f "$a" ] && convert "$a" -resize $re "$re""_tmp/${a%.*} ["$re"].jpg" || :; done

关于bash - 改进 for 循环的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27317856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com