2016-04-27 67 views
6

下面的命令通過當前目錄及其所有子目錄擊:管道查找到grep的

grep -r -n 'some string' . 

這個命令遞歸檢查當前目錄及其所有子遞歸搜索搜索發現「一些字符串」的所有出現目錄和返回表格的所有文件* .axvw

find . -name '*.axvw' 

我想把這兩個命令在一起,所以我得到「一些字符串」的所有出現通過當前目錄遞歸搜索,但只盯着那個結尾的文件在'axvw 」。

當我試圖運行返回下面的命令沒什麼:

find . -name '*js' | grep -n 'some string' 

我在做什麼錯?

+1

看到這裏給出的答案:http://serverfault.com/questions/9822/recursive-text-search-with-grep-and-file-patterns –

+0

的[如何使用管道可能的複製in -exec in find](https://stackoverflow.com/questions/21825393/how-to-use-pipe-within-exec-in-find) – koppor

回答

8

可以在find使用-exec選項:

find . -name '*.axvw' -exec grep -n 'some string' {} + 

或者使用xargs

find . -name '*.axvw' -print0 | xargs -0 grep -n 'some string' 
+2

'-exec grep -n'一些字符串'{} +'會使'find -exec'方法在性能上與xargs競爭,並且保證在2006 POSIX規範中可用。 –

+0

謝謝,關於使用'+'而不是'\'的好點呢?' – anubhava

1

find . -name '*js' -exec grep -n 'some string' {} \;

應該工作,我想。

編輯:只是爲了好玩,你也可以用雙grep我相信。

find . | grep 'some string' | grep js

+1

不,你建議的「double grep」不會幫助 - 它在兩個階段都會對文件名而不是內容進行格式化。 –