在bash脚本中,我想列出与字符串匹配的所有文件,包括那些带有前导点的文件。
E.g。
ls -A
给了我
.bla.0 .bla.1 bla.2 bla.3
我希望得到一个排序
的表达式 for f in <whatgoeshere?>${pat}* ; do
<something with $f>
done
我尝试过使用
shopt -s extglob
和某种形式的?(。)bla *和?(\。)bla *,但无济于事。
我可以用
shopt -s dotglob
但是我想知道,如果有一种方法可以指定模式而不使用它。
这可行,但不是很优雅:
for f in `shopt -s dotglob ; ls -A *${pat}*` ; do echo $f; done
答案 0 :(得分:2)
您可以将ls -A
命令替换为find
-regex
开关,如下所示:
while read f; do echo $f; done < <(find . -maxdepth 1 -regex ".*${pat}.*")
答案 1 :(得分:2)
pat=bla
for i in .${pat}* ${pat}*; do
echo $i
done
答案 2 :(得分:2)
你不需要外接手。只需使用这样的东西:
for f in {.,}${pat}* ; do
[[ $f == "." || $f == ".." ]] && continue
echo $f
done
更新
如果您预计名称中包含空格的文件,请使用基于find
的解决方案。