排除文件
这可能很容易,但是我无法弄清楚。在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
如果要处理许多文件,也可以使用GLOBIGNORE
或extended 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