1

在 bash 脚本中,我想列出与字符串匹配的所有文件,包括带有前导点的文件。

例如

    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
4

3 回答 3

2

你不需要 extglob。只需使用这样的东西:

for f in {.,}${pat}* ; do
    [[ $f == "." || $f == ".." ]] && continue
    echo $f
done

更新:

如果您预计名称中包含空格的文件,请使用find基于的解决方案。

于 2013-08-14T09:56:56.910 回答
2
pat=bla

for i in .${pat}* ${pat}*; do
    echo $i
done
于 2013-08-14T09:56:24.797 回答
2

您可以使用switch替换您的ls -A命令,如下所示:find-regex

while read f; do echo $f; done < <(find . -maxdepth 1 -regex ".*${pat}.*")
于 2013-08-14T09:47:03.013 回答