使用grep --exclude / - include語法不要瀏覽某些文件

我在目錄樹中的文本文件中尋找字符串foo= 。 它在一臺普通的Linux機器上,我有bash shell: shell

grep -ircl "foo=" *

在目錄中還有許多匹配「foo =」的二進制文件。 因爲這些結果不相關而且減慢了搜索速度,我但願grep跳過搜索這些文件(主要是JPEG和PNG圖像)。 我該怎麼辦? bash

我知道有--exclude=PATTERN--include=PATTERN選項,但模式格式是什麼? grep的手冊頁說: svn

--include=PATTERN     Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN     Recurse in directories skip file matching PATTERN.

搜索grep includegrep include excludegrep exclude和variants沒有找到任何相關內容 工具

若是有一種更好的方法只在某些文件中進行grepping,我就是盡心盡力; 移動違規文件不是一種選擇。 我不能只搜索某些目錄(目錄結構很亂,隨處可見)。 另外,我沒法安裝任何東西,因此我必須使用經常使用工具(如grep或建議的查找 )。 spa


#1樓

我是一個dilettante,授予,但這是個人〜/ .bash_profile看起來如何: 命令行

export GREP_OPTIONS="-orl --exclude-dir=.svn --exclude-dir=.cache --color=auto" GREP_COLOR='1;32'

請注意,要排除兩個目錄,我必須使用--exclude-dir兩次。 code


#2樓

通過很長一段時間我發現了這個,你能夠添加多個包含並排除以下: ip

grep "z-index" . --include=*.js --exclude=*js/lib/* --exclude=*.min.js

#3樓

使用shell globbing語法: 字符串

grep pattern -r --include=\*.{cpp,h} rootdir

--exclude的語法是相同的。 擴展

請注意,使用反斜槓轉義星號以防止它被shell展開(引用它,例如--include="*.{cpp,h}" ,也能夠正常工做)。 不然,若是當前工做目錄中的任何文件與模式匹配,命令行將擴展爲相似grep pattern -r --include=foo.cpp --include=bar.h rootdir ,它只會搜索文件名爲foo.cppbar.h ,極可能不是你想要的。


#4樓

我發現grepping grep的輸出有時很是有用:

grep -rn "foo=" . | grep -v "Binary file"

雖然,這實際上並無阻止它搜索二進制文件。


#5樓

find和xargs是你的朋友。 使用它們來過濾文件列表而不是grep的--exclude

嘗試相似的東西

find . -not -name '*.png' -o -type f -print | xargs grep -icl "foo="
相關文章
相關標籤/搜索