Linux Bash脚本:循环遍历文件夹中的多个文件扩展名,忽略不带';不存在
我有一个图片目录,可以包含jpeg、jpg和png文件。我想在bash脚本中循环它们。目录可能不包含任何png文件、jpeg文件或jpg文件。如果文件扩展名不存在,我的脚本将给出一个错误。如何忽略这些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
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)是一个经过路径名扩展的单一模式。可能与、、等重复。