2017-07-14 109 views
1

希望这是一个简单的,但我不明白。我试图找出为什么这个命令没有找到任何结果:查找不匹配grep,结果

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' . 

回答

1

逻辑 - 并且绑定比逻辑或更紧。尝试:

find . \(-iname '*.cgi' -o -iname '*.txt' -o -iname '*.htm' -o -iname '*.html' -o -iname '*.php' \) -exec grep -l 'community.cgi' {} + 

在此,括号(其必须被转义穿过壳)用于将-iname测试结合在一起,以使得如果-exec运行这些测试中的任何一个为真。

+1

啊人,我应该试过!谢谢,作品魅力:) –