【问题标题】:Unix find with wildcard directory structure带有通配符目录结构的 Unix 查找
【发布时间】:2011-08-04 06:34:57
【问题描述】:

我正在尝试执行find,我可以在目录结构中指定通配符,然后在数据目录中的所有文件中为 www.domain.com 执行 grep。

find /a/b/c/*/WA/*/temp/*/*/data -type f -exec grep -l "www.domain.com" {} /dev/null \;

这在 c/*/WA 之间只有一个可能的级别时可以正常工作。

在 C/*/WA 之间可能存在多个级别的情况下,我将如何执行上述相同的操作?

所以它可能在

/a/b/c/*/*/WA/*/temp/*/*/data 

/a/b/c/*/*/*/WA/*/temp/*/*/data

/c//WA/ 之间没有定义数量的目录;可能有多个级别,每个级别都可能有/WA/*/temp/*/*/data

关于如何进行此类查找的任何想法?

【问题讨论】:

    标签: regex unix find grep


    【解决方案1】:

    如何使用for 循环查找WA 目录,然后从那里开始:

    for DIR in $(find /a/b/c -type d -name WA -print); do
        find $DIR/*/temp/*/*/data -type f \
            -exec grep -l "www.domain.com" {} /dev/null \;
    done
    

    您也许可以在一个命令中获得所有这些,但我认为从长远来看,清晰更重要。

    【讨论】:

    • 第二个find 让shell 完成繁重的工作,并使用find 只是为了检查data 实际上是一个常规文件,而不是一个目录(或其他“非文件”) ')。
    • 我认为这可能有效 - 我只是在检查它是否正确!谢谢!
    【解决方案2】:

    假设路径中没有空格,那么我会考虑:

    find /a/b/c -name data -type f |
    grep -E '/WA/[^/]+/temp/[^/]+/[^/]+/data' |
    xargs grep -l "www.domain.com" /dev/null
    

    这使用find 来查找文件(而不是让shell 完成大部分工作),然后使用grep -E(相当于egrep)在路径中选择具有正确模式的名称,然后使用xargsgrep(再次)找到目标模式。

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2012-07-30
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2021-06-04
      • 2017-10-19
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多