结合grep对多个文件扩展名使用find



我在Windows的msys中使用find和grep时遇到了问题。但是,我也在Linux机器上尝试了相同的命令,它的行为是一样的。尽管如此,下面的语法适用于windows,因为命令末尾的分号前面没有反斜杠。

我试图写一个查找表达式来查找*.cpp和*.h文件,并将结果传递给grep。如果我单独运行它,它会成功地找到所有的。cpp和。h文件:

find . -name '*.cpp' -o -name '*.h'

但是如果我像这样添加一个exec grep表达式:

find . -name '*.cpp' -o -name '*.h' -exec grep -l 'std::deque' {} ;

它只处理。h文件。如果我在命令中切换。h和。cpp的顺序,它只搜索。h。实际上,它似乎只grep表达式中的最后一个文件扩展名。我需要做些什么来grep。h和。cpp?

由于您使用的是-o,因此需要将其括起来:

find . ( -name '*.cpp' -o -name '*.h' ) -exec grep -l 'std::deque' {} ;

或者…

bash$> grep '/bin' `find . -name "*.pl" -o -name "*.sh"`
./a.sh:#!/bin/bash
./pop3.pl:#!/usr/bin/perl
./seek.pl:#!/usr/bin/perl -w
./move.sh:#!/bin/bash
bash$>

上面命令greps 'bin'在".sh"one_answers".pl"文件。而且它已经找到了!!

最新更新