在 sh 脚本中,我试图遍历与以下模式匹配的所有文件,
abc.123
基本上是 abc。后面只能跟数字,后面的数字.
可以是任意长度。
使用
$ shopt -s extglob
$ ls abc.+([0-9])
完成这项工作,但在终端上而不是通过脚本。如何仅获取与模式匹配的文件?
如果我理解正确,该模式可以翻译成正则表达式:
^abc\.[0-9]+$
所以你可以
继续使用ls
并 grep 输出。例如:
ls *.*|xargs -n1|grep -E '^abc\.[0-9]+$'
或使用find
find 有一个选项-regex
如果您正在使用sh
而不是bash
,并且大概您还希望符合 POSIX 标准,您可以使用:
for f in ./*
do
echo "$f" | grep -Eq '^\./abc.[0-9]+$' && continue
echo "Something with $f here"
done
它可以很好地处理带有空格、引号等的文件名,但可能会匹配一些不应该包含换行符的文件名。
If you tagged your question bash
because you're using bash, then just use extglob like you described.