遞歸搜尋資料夾但排除 svn 子資料夾

遞歸搜尋資料夾但排除 svn 子資料夾

我想找到fooSVN 維護的大型檔案系統中所有出現的情況,但我不想匹配任何.svn目錄中包含的任何內容。

當我這樣做時,我會立即得到匹配,但是當我嘗試使用命令grep -l -e 'foo' *排除 svn 目錄時,就會掛起。grep -l -e 'foo' --exclude-dir=".svn"

我究竟做錯了什麼?

答案1

--exclude-dir不取代在命令列上列出文件的需要。您正在“掛起”,因為grep正在等待標準輸入。

grep -l -e 'foo' --exclude-dir=".svn"*

考慮使用確認.svn預設情況下排除類似的資料夾(並具有許多其他功能)。

答案2

您可能感興趣確認。它執行遞歸搜尋(以及其他類似 grep 的操作),並排除諸如.svn或者.git預設情況下。

答案3

解決grep --exclude-dir...方案應該沒問題,但只是為了展示另一種方式,您可以使用find's執行此操作-prune

find -name .svn -prune -o -type f -exec grep -l "$pattern" {} +

如果你想進一步執行一些事情,find比普通的更好grep -r

find -name .svn -prune -o -type f -exec grep -q "$pattern" {} \; -exec ./process {} \;

答案4

如果您不想 grep 進入諸如.svn 曾經您可以設定$GREP_OPTIONS變數以排除它,如下所示:

export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"

只需將此行新增至您.bashrc的遞歸 grep 將不再進入.svn目錄。當然,它可以隨你的需要而豐富:

export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"

相關內容