使用可选的前导点迭代文件,而不使用shopt -s dotglob

时间:2013-08-14 09:38:43

标签: bash

在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

3 个答案:

答案 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的解决方案。