我正在尝试在 bash 中编写一个 for 循环来获取扩展名为 jpg、jpeg、png 的文件,这是我的尝试,但不起作用
for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done;
基本上,我想在当前文件夹中获取具有这些扩展名的文件的名称,并对每个文件执行一些操作,然后使用新的扩展名输出文件名。
我正在尝试在 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
我想建议对提议的解决方案进行 2 项改进:
A. "$arg"/ .{jpg,jpeg,png} 中的 for 文件也将产生 "$arg"/ .jpeg 如果没有带有 jpeg 扩展名的文件并且会产生脚本错误:
$ echo *.{jpg,jpeg,png}
myPhoto.jpg *.jpeg *.png
为了避免这种情况,就在 for 循环之前,将 nullglob 设置为从列表中删除 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