Grep

有沒有辦法從 grep 遞歸搜尋中排除由該目錄的路徑指定的嵌套子目錄?

  • June 25, 2020

或者我必須使用ackfind為此?

這就是我想要的。假設我有這個目錄結構:

dir/nesteddir/match.txt
otherdir/nesteddir/match.txt

如何僅排除第一個嵌套目錄?甚至可以使用grep嗎?最明顯的答案$ grep -r --exclude-dir="dir/nesteddir" "stringToFind" .似乎不起作用,我--exclude-dir使用 globbing、leading./等對各種路徑進行的任何實驗也不起作用。

閱讀手冊頁和Google搜尋沒有幫助,我發現這個案例的唯一提及是這個問題:grep –exclude-dir behavior: a bug or a feature?

得出的結論是這是 grep 2.12 中引入的錯誤,但我使用的是最新版本(2.16)並且 grep 的錯誤跟踪器(https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep)沒有提到任何相關的東西--exclude-dir,所以我猜它要麼是固定的,要麼是預期的行為。

能得到一些澄清真是太好了。

的參數--exclude-dir是與目錄的基本名稱匹配的模式,即沒有前導父目錄的部分。例如--exclude-dir=nesteddir排除dir/nesteddirotherdir/nesteddir(及其子目錄)。

僅使用 GNU grep 就無法在不排除其他同名目錄的情況下排除一個目錄。您需要使用更複雜的方法來選擇文件,例如 GNU find:

find dir -path dir/nesteddir -prune -o -type f -exec grep -H 'pattern' {} +

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