web-dev-qa-db-ja.com

非表示のサブディレクトリをgrep -rから除外する

私はsvnローカルコピーを持っています。文字列some_stringを検索したいのですが。

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

しかし、さらに先に進むと、第1レベルの隠しディレクトリが除外されているようです。

$ 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
22
MUY Belgium

使用する --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でのみ使用できます。grepがそれをサポートしていない場合、他のツールを検索として使用する必要があるかもしれません =:

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

私は通常これを使います:

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

${e%\./}は最初の./を削除し、次にgrepはドットで始まるすべてのものを削除します。

1
Manuel