我正在尝试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
。
关于如何进行查找的任何想法?
答案 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
)来选择名称。路径中的正确模式,然后使用xargs
和grep
(再次)查找目标模式。