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

时间:2016-05-25 21:45:34

标签: linux bash

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

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

3 个答案:

答案 0 :(得分:3)

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

for file in *.{jpg,jpeg,png}; do
  [ -e "$file" ] || continue
  # Here "$file" exists
done

您还可以使用shopt -s nullglob来避免扩展到不存在的文件:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

您也可以使用扩展模式。

shopt -s extglob nullglob
for file in *.@(jpg|jpeg|png); do
    echo "$file"
done

*.{jpg,jpeg,png}首先扩展为*.jpg *.jpeg *.png;然后,三种模式中的每一种都经历路径名称扩展。另一方面,*.@(jpg|jpeg|png)是一个模式,它经历了路径名扩展。