如何在具有特定扩展名的文件中递归grep?

时间:2018-08-21 15:56:00

标签: grep find

要在子目录中查找所有扩展名为.out的文件路径,我使用

find . -name '*.out'

要在所有以.out结尾的文件中使用模式,请使用

grep pattern *.out

如何结合这两个命令,以便找到所有文件,然后抓取这些文件?

我正在寻找一种优雅的替代品

grep -r 'pattern' . | grep '.out'

2 个答案:

答案 0 :(得分:3)

如果您的Shell是Bash 4+版本,则可以使用globstar

shopt -s globstar
grep pattern **/*.out

来自Bash manual

  

globstar

     

如果设置,则在文件名扩展上下文中使用的模式“ **”将   匹配所有文件以及零个或多个目录和子目录。如果   模式后跟一个“ /”,仅目录和子目录   匹配。

答案 1 :(得分:1)

find允许您使用-exec选项在找到的每个文件上运行程序:

find -name '*.out' -exec grep -H pattern {} \;

{}指示文件名,;告诉find,这是grep参数的结尾。 -H告诉grep始终打印文件名,通常仅在有多个文件要处理时才会这样做。