【问题标题】:ls command that excludes directories that end inls 命令排除以
【发布时间】:2018-08-24 23:39:46
【问题描述】:

我正在编写一个 shell 脚本,它获取目录列表并对其进行处理。但是,有些目录需要包含,在这种情况下,任何以“功能”开头的目录,并排除,在这种情况下,任何以“tmp”结尾的目录

我做了一些研究,发现了--ignore 选项,它采用正则表达式。

正则表达式很糟糕,我查找了“找到任何以结尾的东西”,结果是这样的:

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

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

有人知道这个魔法吗?

【问题讨论】:

标签: regex unix


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多