2017-07-14 78 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

啊人,我應該試過!謝謝,作品魅力:) –