Linux命令-----grep不查詢隱藏資料夾(或者跳過某些資料夾)的方法
預設的grep會搜尋所有檔案,包括隱藏資料夾下的檔案。
例如,使用如下命令搜尋MediaButton字串,搜尋結果包含隱藏資料夾下的檔案。
grep -nr MediaButton *
如果是用svn管理的程式碼,每個資料夾下都有一個.svn的隱藏資料夾,包含對程式碼版本的控制資訊,日積月累會越來越龐大。所有如果只是預設搜尋的話,很多搜尋結果都是svn目錄下的,對我們來說,是沒有價值的內容;而且還會耗費很多時間。
grep的--exclude-dir=引數就是為了排除某個目錄的,即不包含等號後面的目錄,所以我們可以利用此引數去掉.svn的隱藏目錄。
--exclude-dir=引數的用法如下:
1. If you have GNU Grep, it should work like this:
grep --exclude-dir=".svn"
例如:查詢當前目錄以及子目錄下所有包含"MediaButton"字串的程式碼並列印行號
grep -nr --exclude-dir=".svn" MediaButton *
或者
grep -nr --exclude-dir=\.svn MediaButton *
--exclude-dir=後面要排除的目錄用雙引號括起來或者直接接目錄名都可以,但是特殊字元必須用轉義符表示,例如".svn"中的"."。
2.If happen to be on a Unix System without GNU Grep, try the following:
這種方式是使用管道進行雙層“過濾”,其中第二次grep使用了-v選項,即逆向匹配,打印出不匹配的行
grep -R "whatever you like" *|grep -v "\.svn/*"
3. 如果每次都輸入--exclude-dir=引數,是不是很慢還容易出錯,降低效率呢?
不過不用擔心,我們可以把--exclude-dir=引數通過加入配置檔案 ~/.bashrc (這是bash的當前使用者配置檔案) 的方法來簡化操作,提高效率。
在~/.bashrc檔案的末尾新增以下命令:
- export GREP_OPTIONS="--exclude-dir=\.svn"
然後搜尋時,執行以下命令即可:
grep -nr MediaButton *
這樣預設就會載入GREP_OPTIONS選項,不搜尋.svn目錄。
需要注意的是,GREP_OPTIONS這個關鍵詞不能修改為其他的,否則系統就不會認為是grep的一個選項引數了。