Find 在结果之后查找不匹配的grep

Find 在结果之后查找不匹配的grep,find,Find,希望这是一个简单的问题,但我想不出来。我正在试图找出此命令找不到任何结果的原因: find . -iname '*.cgi' -o -iname '*.txt' -o -iname '*.htm' -o -iname '*.html' -o -iname '*.php' -exec grep -l 'community.cgi' {} + 如果我简化它并只做: find . -iname '*.cgi' -o -iname '*.txt' -o -iname '*.htm' -o -iname

希望这是一个简单的问题,但我想不出来。我正在试图找出此命令找不到任何结果的原因:

find . -iname '*.cgi' -o -iname '*.txt' -o -iname '*.htm' -o -iname '*.html' -o -iname '*.php' -exec grep -l 'community.cgi' {} +
如果我简化它并只做:

find . -iname '*.cgi' -o -iname '*.txt' -o -iname '*.htm' -o -iname '*.html' -o -iname '*.php' 
然后我得到了我期待的文件列表。由于某种原因,
-exec
部分似乎不是我所期望的。如果我只是对所有文件运行基本grep,我也会得到文件列表:

grep -l 'community.cgi' .

逻辑and绑定比逻辑or更紧密。尝试:

find . \( -iname '*.cgi' -o -iname '*.txt' -o -iname '*.htm' -o -iname '*.html' -o -iname '*.php' \) -exec grep -l 'community.cgi' {} +
这里,paren(必须转义才能通过shell)用于将
-iname
测试绑定在一起,以便在其中任何一个测试为真时运行
-exec