5

假设有以下目录树:

foo/
   +bar/
   |   +VIEW/
   |   |    +other/
   |   |          +file.groovy
   |   |    +file2.groovy
   |   |    +file.txt
   |   +file3.groovy
   +xyz/
       +VIEW/
            +file4.groovy
       +file5.groovy

而且我只想对位于VIEW或 VIEW 下method任何目录(即 file.groovy、file2.groovy 和 file4.groovy)中的 groovy 文件进行 grep。

我正在尝试这样做--include=.*\/VIEW\/.*\.groovy,据我所知,它是任何东西的正则表达式,然后是 / 字符,然后是单词 VIEW,然后是 / 字符,然后是任何东西,然后是单词 .groovy

但这实际上并没有返回任何东西。

没有使用该include选项的方法吗?

4

3 回答 3

5

来自UNIX 哲学

编写只做一件事并做好的程序。编写程序以协同工作。

我不喜欢递归目录搜索的 GNU 扩展。该工具find做得更好,语法更简洁,选项更多,并且不会破坏哲学!

$ find foo/*/VIEW -name "*.groovy" -exec grep method {} \;   
于 2013-08-13T10:40:10.230 回答
2

指定应该工作的-path选项:find

find foo/ -path "*/VIEW/*" -name "*.groovy" -exec grep method {} \;
于 2013-08-13T11:03:00.483 回答
1

您不需要在include=选项中提供目录路径,只需将路径作为递归 grep 的最后一个参数提供。

因此,您可以简单地执行以下操作:

grep -R 'method' --include=*.groovy foo/bar/VIEW/
于 2013-08-13T10:45:55.997 回答