在循环(球形)中排除具有某些前缀的文件名



这可能很容易,但是我无法弄清楚。在for循环中,我想使用前缀zz(例如zz131232.JPG)排除某些文件,但我不知道如何排除这些文件。

for i in *.JPG; do
    # do something
done

如何修改"规则"以使用前缀zz

排除文件

之类的东西
for i in *.JPG; do
  [[ $i != "zz"* ]] && echo "$i"
done

或跳过:

for i in *.JPG; do
  [[ $i == "zz"* ]] && continue
  # process the other files here
done

如果要处理许多文件,也可以使用GLOBIGNOREextended globbing来避免首先扩展您要跳过的文件(可能更快):

GLOBIGNORE='zz*'
for file in *.JPG; do
    do_something_with "${file}"
done
# save and restore GLOBIGNORE if necessary

shopt -s extglob # enable extended globbing
for file in !(zz*).JPG; do
    do_something_with "${file}"
done
shopt -u extglob # disable extended globbing, if necessary

请注意,如果当前目录中没有.JPG文件,则仍将输入循环,并将$i设置为文字*.JPG(在您的示例中),因此您要么需要检查循环内的文件是否存在或使用nullglob选项。

for file in *.JPG; do
    [ -e "${file}" ] || continue
    do_something_with "${file}"
done

shopt -s nullglob
for file *.JPG; do
    do_something_with "${file}"
done
shopt -u nullglob # if necessary

尝试以下内容,以了解没有nullglob的情况:

$ for f in *.doesnotexist; do echo "$f"; done
*.doesnotexist

相关内容

  • 没有找到相关文章

最新更新