我安裝了 cygwin,當我使用此命令搜尋原始程式碼時,沒有顯示任何內容,即使我在文件中包含該字串
$ echo foo > bar
$ find . -name '*' | grep foo
什麼也沒有出現。該命令在 GNU+Linux 上運行良好。
$ grep foo bar
答案1
如前所述,find 將找到的檔案清單輸出到 stdout,如果以這種方式調用,grep 通常希望透過 stdout 進行搜尋。
也可以透過管道查找到xargs
,它會“從標準輸入建置並執行命令列「,如
$ find . | xargs grep foo
如果你有瘋狂的文件名,帶有換行符之類的東西,那麼這會更好:
$ find . -type f -print0 | xargs -0 grep foo
並且只會找到常規文件,因此不會嘗試透過任何或任何目錄或「有趣」文件-type f
進行 grep 。.
..
答案2
find . -name '*' # This will produce a list of *file names*
然後,您將文件名列表傳遞到grep
標準輸入,它將列表視為文字並蒐索foo
您沒有文件名,foo
因此它不會返回任何內容。
要遞歸搜尋文件以查找文件中的文本,您可以簡單地使用
grep -R foo somefolder/
答案3
當我使用此命令搜尋原始程式碼時,沒有顯示任何內容
$ echo foo > bar
$ find . -name '*' | grep foo
find
搜尋符合所需條件的檔案名稱:名稱、大小、檔案類型並傳回符合檔案名稱的清單。它不會返回內容的匹配文件。
grep
當使用管道運算子傳遞該檔案名稱清單時,grep
將看到字串bar
(檔案名稱)和不是 foo
(文件的內容bar
)。
grep
因此找不到匹配項,因此沒有任何輸出。
筆記:
grep
可以直接搜尋文件。你不需要使用find
. Pipes|
,或xargs
依照另一個答案中的建議。
以下命令適用於 Cygwin:
grep --exclude-dir=* "foo" ./*
例子:
DavidPostill@Hal /f/test
$ cat bar
foo
DavidPostill@Hal /f/test
$ grep --exclude-dir=* "foo" ./*
./bar:foo
進一步閱讀
- Linux Bash 命令列的 AZ 索引- 與 Bash 命令列相關的所有內容的絕佳參考。
- 尋找- 在資料夾層次結構中搜尋符合所需條件的檔案名稱:名稱、大小、檔案類型。
- grep- 搜尋文件中的特定文字。
答案4
我想你想要這個。
find . -name '*' -type f -exec grep foo /dev/null {} \;
您只想 grep 文件,而不是目錄或特殊文件。 /dev/null 使 grep 顯示檔名。您可能想要刪除 '-name '*',但如果這樣做,點檔案將被 grep 。
你也可以運行
grep -r foo .