for循环用于多个扩展并对每个文件执行某些操作

时间:2012-09-04 08:14:43

标签: bash

我正在尝试在bash中编写一个for循环以获取jpg,jpeg,png扩展名的文件,这是我的尝试,但不起作用

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

基本上,我想在当前文件夹中获取带有这些扩展名的文件的名称,并对每个文件执行某些操作,然后使用新扩展名输出文件名。

2 个答案:

答案 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