Bash for循环多个扩展名,并对每个文件执行某些操作

Bash for循环多个扩展名,并对每个文件执行某些操作,bash,Bash,我试图在bash中编写一个for循环,以获取扩展名为jpg、jpeg、png的文件,这是我的尝试,但没有成功 for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done; 基本上,我希望获得当前文件夹中具有这些扩展名的文件名,并对每个文件执行一些操作,然后以新的扩展名输出文件名。您没有在任何地方使用$file。试一试 for file in "$arg"/*.{jpg,jpeg,pn

我试图在bash中编写一个for循环,以获取扩展名为jpg、jpeg、png的文件,这是我的尝试,但没有成功

for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done;

基本上,我希望获得当前文件夹中具有这些扩展名的文件名,并对每个文件执行一些操作,然后以新的扩展名输出文件名。

您没有在任何地方使用
$file
。试一试

for file in "$arg"/*.{jpg,jpeg,png} ; do
    echo "$file" > z.txt
done

我想对提议的解决方案提出两项改进:

A.“$arg”/.{jpg,jpeg,png}中的for文件也将生成“$arg”/.jpeg,如果没有具有jpeg扩展名的文件,并且会导致脚本错误:

$ echo *.{jpg,jpeg,png}
myPhoto.jpg *.jpeg *.png
为了避免这种情况,在for循环之前,将null glob设置为从列表中删除null glob:

$ shopt -s nullglob # Sets nullglob
$ echo *.{jpg,jpeg,png}
myPhoto.jpg
$ shopt -u nullglob # Unsets nullglob
B.如果您还想搜索*.png或*.png或*.png(即忽略大小写),则需要设置nocaseglob:

$ shopt -s nullglob # Sets nullglob
$ shopt -s nocaseglob # Sets nocaseglob
$ echo *.{jpg,jpeg,png}
myPhoto.jpg myPhoto.PnG
$ shopt -u nocaseglob # Unsets nocaseglob
$ shopt -u nullglob # Unsets nullglob

很好的建议,可能是重复的。谢谢