使用“ grep”在所有子目录中搜索特定类型的文件

时间:2019-08-20 14:21:17

标签: linux grep

我试图在包含许多子目录的目录中的包含“ Mutual_Values_23.0”的文件中找到特定行。我知道此行号存储在以“ gnuout_mutual _.... txt”开头的文件中(文件名的省略号部分是时间戳,因此会有所不同)。

我想知道是否有一种方法可以指定“ grep”命令以仅针对以“ gnuout_mutual _.... txt”开头的文件查看子目录。

我尝试过

grep -r "Mutual_Values_23.0" * 

但这要花很长时间

6 个答案:

答案 0 :(得分:1)

使用find在所有子目录中搜索带有搜索字符串“ Mutual_Values_23.0”的“ gnuout ... txt”文件

find . -mindepth 1 -name gnuout_mutual_\*.txt -type f -exec grep "Mutual_Values_23.0" {} +

答案 1 :(得分:1)

您可以使用以下grep选项:

 --include=GLOB
 Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).

对于行号,您应该使用-n选项。 在要查找的文件夹的根目录中,可以使用以下最终命令:

grep -nr "Mutual_Values_23.0" --include="gnuout_mutual_*txt"

答案 2 :(得分:1)

如果您使用,则可以使用 globstar 选项:

  

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

因此您可以像这样使用它:

$ shopt -s globstar
$ grep "search_string" **/glob-pattern

或对于OP:

$ shopt -s globstar
$ grep Mutual_Values_23.0 **/gnuout_mutual_*.txt

答案 3 :(得分:0)

GNU grep具有--include GLOB选项,其中GLOB可用于指定您需要匹配的文件名模式。

grep -rn --include 'gnuout_mutual_*txt' 'Mutual_Values_23.0' .

答案 4 :(得分:0)

使用此命令:

$ find . -name "*Mutual_Values_23.0*"

注意:在要搜索文件集的目录中运行此命令。

希望它会有所帮助,加油!

答案 5 :(得分:0)

您可以使用find搜索文件并将结果传递给grep。

find /directory_where_to_search/ -iname 'gnuout_mutual_*.txt' | xargs grep 'Mutual_Values_23.0' -sl