ls命令,该命令排除以结尾的目录

时间:2018-08-24 03:25:55

标签: regex unix

我正在编写一个shell脚本,该脚本接受目录列表并对其进行填充。但是,必须包含目录,在这种情况下,任何以“功能”开头的目录都必须包括在内,在这种情况下,任何以“ tmp”结尾的目录都必须排除

我做了一些研究,发现了--ignore选项,该选项带有正则表达式。

在regex上很糟糕,我抬起头来“发现所有以结尾为结尾的东西”,最后我得到了这个结果:

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

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

有人知道这种魔法吗?

1 个答案:

答案 0 :(得分:1)

这里有多个问题。 \A\z在大多数正则表达式中不可用;但此外,--ignore的参数根本不是正则表达式。您正在寻找一个shell glob(通配符)模式。 (有点不精确,GNU ls man page只是将其称为“外壳模式”。ls的此选项是GNU扩展BTW。)

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

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

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