在多个文件扩展名上使用find和grep一起使用

时间:2016-10-06 17:18:16

标签: bash shell

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

我正在尝试编写一个find表达式来查找* .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 ??

2 个答案:

答案 0 :(得分:0)

由于您正在使用-o,因此您需要在其周围使用括号:

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

答案 1 :(得分:0)

或者......你可以......

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”和“ .pl”文件中。它找到了它们!!