Bash for循环多个扩展名,并对每个文件执行某些操作
我试图在bash中编写一个for循环,以获取扩展名为jpg、jpeg、png的文件,这是我的尝试,但没有成功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
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
很好的建议,可能是重复的。谢谢