代码之家  ›  专栏  ›  技术社区  ›  mmaceachran

ls命令,该命令排除以

  •  0
  • mmaceachran  · 技术社区  · 8 年前

    我正在编写一个shell脚本,它获取目录列表并对其进行处理。但是,有些目录需要包括,在本例中,任何以“feature”开头的目录,在本例中,任何以“tmp”结尾的目录都不包括在内

    我做了一些调查,发现 --ignore 选项,它接受正则表达式。

    因为对regex很糟糕,我查了一下“查找以结尾的任何内容”,结果发现:

    ls -d --ignore=\A[a-z]*tmp\z feature*
    

    这确实列出了以“feature”开头的所有目录,但仍然列出了以“tmp”结尾的目录

    有人知道这个魔术吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   tripleee    8 年前

    这里有很多问题。 \A \z 在大多数regex方言中都不可用;而且 --ignore 完全不是正则表达式。您正在寻找shell glob(通配符)模式。(有点不准确 GNU ls man page 负载感应 是GNU扩展,顺便说一句。)

    ls --ignore='[a-z]*tmp' feature*
    

    还要注意模式周围的引号;在不引号或转义的情况下,shell将尝试对值执行自己的反斜杠处理和通配符扩展。

    (有些人喜欢说通配符是“一种”正则表达式,但这对IMHO真的没有帮助。它们是两种不同的形式,具有不同的功能和语法。新来者已经对正则表达式有不同的方言感到困惑。)