如果我進入/etc/apache2/
並輸入,grep -rl 'LoadModule php' ./*
那麼我只會看到./mods-available/php7.0.load
.如果我改為r
然後R
我會看到
./mods-available/php7.0.load
./mods-enabled/php7.0.load
這兩個都是普通目錄。我希望-r
grep 遞歸 PWD 中的所有檔案/目錄。這是怎麼回事-r
?我只想-R
在這一點上一直使用。
答案1
根據grep 的線上說明頁:
-r, --遞迴
只有當符號連結位於命令列時,才以遞歸方式讀取每個目錄下的所有檔案。請注意,如果未給出檔案操作數,grep 將搜尋工作目錄。這相當於 -d 遞歸選項。-R, --取消引用遞迴
遞歸讀取每個目錄下的所有檔案。與 -r 不同,遵循所有符號連結。
例子:
我有一個資料夾測試其中有一個文件1.txt。2.txt是一個符號連結1.txt這樣的輸出ls -l test
看起來像:
-rw-r--r-- 1 kulfy kulfy 15 Jun 12 21:53 1.txt
lrwxrwxrwx 1 kulfy kulfy 5 Jun 12 21:53 2.txt -> 1.txt
內容為1.txt是:
This is a file.
如果我想尋找“文件”文件裡面的字串測試資料夾,我運行:
grep "file" test
我會遇到一個錯誤:
grep: test: Is a directory
但如果我這樣做:
grep -R "file" test
我得到一個輸出:
test/2.txt:This is a file
test/1.txt:This is a file
另一方面,如果我運行:
grep -r "file" test
我得到輸出:
test/1.txt:This is a file
在這裡,我沒有明確提到掃描所有文件。所以,當我使用R
標誌時,符號連結(這裡2.txt)受到尊重並產生了輸出。但是當我使用r
標誌時,符號連結被忽略只是因為我沒有提到掃描2.txt也.
答案2
來自 GNU grepv2.11-8以上版本,如果調用-r
排除符號連結未在命令列上指定,並在使用-R
(調用時包含它們來源)。
-r
,--recursive
遞歸地讀取每個目錄下的所有文件,僅當符號連結位於命令行時才遵循它們。請注意,如果未給出檔案操作數,grep 將搜尋工作目錄。這相當於 -d 遞歸選項。
-R
,--dereference-recursive
遞歸讀取每個目錄下的所有檔案。遵循所有符號鏈接,不像-r
。