我正在尝试在bash中编写一个for循环以获取jpg,jpeg,png扩展名的文件,这是我的尝试,但不起作用
for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done;
基本上,我想在当前文件夹中获取带有这些扩展名的文件的名称,并对每个文件执行某些操作,然后使用新扩展名输出文件名。
答案 0 :(得分:22)
您没有在任何地方使用$file
。尝试
for file in "$arg"/*.{jpg,jpeg,png} ; do
echo "$file" > z.txt
done
答案 1 :(得分:11)
我想对建议的解决方案提出两点改进建议:
一个。如果没有文件," $ arg" / 。{jpg,jpeg,png}中的for文件也会产生" $ arg" / .jpeg jpeg扩展并用脚本创建错误:
$ echo *.{jpg,jpeg,png}
myPhoto.jpg *.jpeg *.png
为避免这种情况,在for循环之前,设置nullglob以从列表中删除null globs:
$ 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