Linux

“grep -rn”只產生兩個預期結果之一

  • September 24, 2021

我正在嘗試在包含特定單詞的目錄結構中查找所有文件,但它無法正常工作。

  • 例如:從路徑執行時/Institute/IITDhanbad/,命令
grep -rn "Programmer" *

結果為

BTECH/CompScience.txt:22:    Sudip is a Programmer
  • 但是,當從路徑執行時/Institute/IITDhanbad/MTECH,相同的命令給出
CSP/Boys/Good/Electronics.txt:13:    Sourav is a Programmer

問題是,在文件夾中執行grep呼叫時的預期結果是同時具有兩個結果,即/Institute/IITDhanbad/

BTECH/CompScience.txt:22:               Sudip is a Programmer
MTECH/CSP/Boys/Good/Electronics.txt:13: Sourav is a Programmer

出了什麼問題以及如何解決這個問題?

一些附加資訊:

  • 文件類型和訪問權限是:
文件模式
MTECHdrwxrwsr-x
BTECHdrwxrwsr-x
CSPlrwxrwxrwx
  • ls -ld/Institute/IITDhanbad/路徑中:
drwxrwsr-x 4 suresh faculty 4096 Sep 16 00:53
  • ls -ld/Institute/IITDhanbad/MTECH路徑中:
drwxrwsr-x 4 suresh faculty 4096 Sep 16 00:53
  • ls -ld/Institute/IITDhanbad/MTECH/CSP路徑中:
dr-xr-sr-t 4 ganesh faculty 4096 Sep 12 20:58 .

CSP是一個符號連結(參見 參考資料llrwxrwxrwx。顯然,除了作為參數提供的符號連結之外,您grep不遵循帶有的符號連結。-r當你這樣做時:

grep -rn "Programmer" *

CSP在(即在/Institute/IITDhanbad/MTECH/,對嗎?)的父目錄中,CSP在 shell 展開後作為參數出現*。但是,如果您將這個目錄“更高”(in /Institute/IITDhanbad/)然後CSP不是參數,它是grep遞歸掃描期間遇到的符號連結。

GNUgrep就是這樣工作的。是你的grepGNUgrep嗎?如果是這樣,請參閱手冊-R-R就像-r但它確實遵循符號連結。

請注意,如果您grep -rn "Programmer" .在父目錄中執行CSPthenCSP將不會作為參數出現。的用法*對於您觀察到的內容至關重要。

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