Linux

grep -r 和 find here 有什麼區別?

  • March 31, 2020

我試圖遞歸地通過目錄中的文件來查找某個字元串。我選擇的解決方案是:

$ find . -type f -exec grep "string to find" {} \+

…雖然遞歸使用 grep (就像其他 unix 使用者喜歡的那樣)似乎會陷入無限循環:

$ grep -r "string to find"

這裡的 find 和 grep 有什麼區別?我正在使用GNU grep 3.4GNU grep 2.7GNU find 4.7.0onLinux 5.4.24ext4文件系統進行比較,順便說一句。

對於grep您缺少 FILE 模式的命令,例如目前目錄:

$ grep -r "string to find" .

至少某些 Unices 的預設行為是在缺少標準輸入時使用它。來自man grep:“grep 搜尋命名的輸入文件(或標準輸入,如果沒有文件被命名,或者單個連字元減號(-)作為文件名給出……”

編輯:對不起,我現在看到 OP 特別提到GNU grep 3.4. 這種行為(使用工作目錄而不是標準輸入)在 v 2.7 之後的某個時候發生了變化,我沒有趕上。我將把答案留在這裡作為不完全閱讀問題的教訓。

引用自:https://unix.stackexchange.com/questions/575271