我希望grep只存在于特定子目录下的某些文件。在这里,我只想要 .xml 文件,如果它们存在于/bar/
子目录下面:
./file0.xml
./.git/file1a.xml
./.git/bar/file1b.xml
./.svn/file2a.xml
./.svn/foo/bar/baz/file2b.xml
./path1/file3.xml
./path1/foo/file4.xml
./path2/foo/bar/file5.xml
./path2/foo/baz/file6.xml
./path3/bar/file7.xml
./path3/foo/bar/baz/file8.xml
我只想要抓取以下文件:file5.xml
,file7.xml
,file8.xml
To exclude .git
和.svn
,我想出了:
grep -r --exclude-dir={.git,.svn} --include=\*.xml "pattern"
仍在搜索file3.xml
到file8.xml
。
如果我grep -v
不受欢迎的目录:
grep -r --exclude-dir={.git,.svn} --include=\*.xml "pattern" | grep -v /bar/
我得到了预期的结果,但它花费了大量时间来解析非/bar/
文件。
使用find
查找/res/
下的xml文件,我得到了所需的结果(并且比上面的结果快得多):
find . -type d \( -name .git -o -name .svn \) -prune -o \
-path '*/bar/*.xml' -exec grep "pattern" {} +
我试图避免这种情况,因为我在脚本中使用它并且不希望仅限于在顶级./
目录中启动搜索。
有没有办法只使用grep来实现这一点(因此它不会阻止用户指定其他grep选项和/或启动搜索目录)?也许是这样的事情:
grep -r --exclude-dir={.git,.svn} --include=\*/bar/\*.xml "pattern"
答案 0 :(得分:0)
find + grep绝对是一个很好的方法。您可以通过定义在战略位置插入参数的函数来使其更灵活。例如:
{{1}}