我正在尝试在bash中编写一个for循环来获取jpg,jpeg,png扩展名的文件,这是我的尝试,但不起作用
for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done;
Run Code Online (Sandbox Code Playgroud)
基本上,我想在当前文件夹中获取带有这些扩展名的文件的名称,并对每个文件执行某些操作,然后使用新扩展名输出文件名.
cho*_*oba 24
你没有$file
在任何地方使用.尝试
for file in "$arg"/*.{jpg,jpeg,png} ; do
echo "$file" > z.txt
done
Run Code Online (Sandbox Code Playgroud)
Nic*_*eek 12
我想对建议的解决方案提出两点改进建议:
答:"$ arg"/ .{jpg,jpeg,png}中的for文件也会生成"$ arg"/ .jpeg,如果没有jpeg扩展的文件并且脚本会产生错误:
$ echo *.{jpg,jpeg,png}
myPhoto.jpg *.jpeg *.png
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,就在for循环之前,设置nullglob以从列表中删除null globs:
$ shopt -s nullglob # Sets nullglob
$ echo *.{jpg,jpeg,png}
myPhoto.jpg
$ shopt -u nullglob # Unsets nullglob
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)