Unix查找带有通配符目录结构

时间:2011-08-04 06:34:58

标签: regex unix find grep

我正在尝试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

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

2 个答案:

答案 0 :(得分:2)

如何使用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

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

答案 1 :(得分:0)

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

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(再次)查找目标模式。