grep -rから隠されたサブディレクトリを除外する

grep -rから隠されたサブディレクトリを除外する

svnのローカルコピーがあり、some_string文字列を検索したいと思います。

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

しかし、さらに一歩進むと、隠されたディレクトリの最初のレベルが除外されるようです。

$ cd lang && grep some_string * -r
en:some_string=Some string

最初の深さレベルだけでなく、出力から隠されたsvnディレクトリをどのように削除できますか?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

答え1

--exclude-dir次のオプションを使用してください。

grep -r --exclude-dir='.*' some_string

からman grep

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

ただし、この--exclude-dirオプションはGNU grepでのみ使用できます。サポートしていない場合は、grepfindなどの他のツールを使用する必要があります。例えば:

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

答え2

私は通常これを使用します:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}最初の項目を削除し、ポイント./grep始まるすべての項目を削除します。

答え3

OSXでは、次を使用します。

grep -lR --exclude-dir={'*node_modules*',build,'./.*'} 'SearchTerm'

関連情報