Linux Bash脚本:循环遍历文件夹中的多个文件扩展名,忽略不带';不存在

Linux Bash脚本:循环遍历文件夹中的多个文件扩展名,忽略不带';不存在,linux,bash,Linux,Bash,我有一个图片目录,可以包含jpeg、jpg和png文件。我想在bash脚本中循环它们。目录可能不包含任何png文件、jpeg文件或jpg文件。如果文件扩展名不存在,我的脚本将给出一个错误。如何忽略这些 for file in *.{jpg,jpeg,png} ; do echo $file 您可以检查文件是否存在: for file in *.{jpg,jpeg,png}; do [ -e "$file" ] || continue # Here "$file" exists don

我有一个图片目录,可以包含jpeg、jpg和png文件。我想在bash脚本中循环它们。目录可能不包含任何png文件、jpeg文件或jpg文件。如果文件扩展名不存在,我的脚本将给出一个错误。如何忽略这些

for file in *.{jpg,jpeg,png} ; do
 echo $file

您可以检查文件是否存在:

for file in *.{jpg,jpeg,png}; do
  [ -e "$file" ] || continue
  # Here "$file" exists
done
您还可以使用以下选项,以避免扩展到不存在的文件:

shopt -s nullglob
for file in *.{jpg,jpeg,png}; do
  # Here "$file" exists
done

您可以设置
nullglob
选项,这会导致没有匹配项的通配符扩展到空列表,而不是扩展到自身

shopt -s nullglob
for file in *.{jpg,jpeg,png}; do

您还可以使用扩展模式

shopt -s extglob nullglob
for file in *.@(jpg|jpeg|png); do
    echo "$file"
done
*.{jpg,jpeg,png}
首先扩展到
*.jpg*.jpeg*.png
;然后,这三种模式中的每一种都进行路径名扩展<另一方面,代码>*.@(jpg | jpeg | png)是一个经过路径名扩展的单一模式。

可能与、、等重复。