【问题标题】:Check if file exists in a directory specified by regex Linux检查文件是否存在于 regex Linux 指定的目录中
【发布时间】:2016-06-22 11:47:59
【问题描述】:

我正在尝试在文件运算符中使用正则表达式来寻找一个文件,其中一个子目录用正则表达式指定,但我想知道它是否可能。我想我尝试了所有可能的引号和括号组合。要么我在这里遗漏了一些东西,要么文件操作员需要一个特定的路径?

我不完全确定。有人可以澄清一下吗?

我想要实现的是这样的(这显然行不通,因为它将正则表达式部分作为子目录的名称)

if [[ -r '/agent/[0-9 .]*/bin/run.sh' ]]

【问题讨论】:

  • 变量子目录的名称能具体举例吗?这样我们就可以用正则表达式检查

标签: regex linux shell unix


【解决方案1】:

find 有一个-regex 选项

-正则表达式模式

文件名匹配正则表达式模式。这是整个路径上的匹配,而不是搜索。例如,匹配一个文件 命名为./fubar3', you can use the regular expression.*bar.'或者 .*b.*3,但不是f.*r3。 find 理解的正则表达式默认是 Emacs 正则表达式,但这可以通过 -regextype 选项。

if find . -regex '/agent/[0-9 \.]*/bin/run.sh'

【讨论】:

    【解决方案2】:

    根据manual,只有 =~ 运算符会进行正则表达式匹配。

    还有另一种方法:

    RUNFILES=$( find /agent -name run.sh | grep -e '^/agent/[0-9 .]*/bin/run.sh$' )
    if [ -n "$RUNFILES" ]
    then
    [...]
    fi
    

    【讨论】:

    • 感谢您提供的示例。你的和@pacholik 的都是很好的答案。不过,第一个答案是在 1 行中完成的,因此最佳答案将以此为基础。再次感谢您!
    【解决方案3】:

    您可以简单地使用带有正则表达式的ls 命令:

    if ls /agent/[0-9\ .]*/bin/run.sh
    

    【讨论】:

    • 在这种情况下,似乎正则表达式部分也被视为字符串集的一部分。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 2021-09-08
    • 2011-03-16
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2022-11-21
    • 2019-02-17
    相关资源
    最近更新 更多