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


22

私は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

直接的な答えではありませんが、ackを試してみてください。
14年

回答:


21

--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として他のツールを使用する必要があるかもしれません:

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

私はあまりにも古いLinuxの...持っている必要があります
MUYベルギー

答えを編集しましたfind。grepがサポートしていない場合はバージョンを試してください--exclude-dir
jimmij

...私は、バージョンgrepのバージョン2.5.1を持って、そして何の--exclude-dirの引数はありません、と私は考えすべてを試してみました
MUYベルギー

1
2番目の解決策は使用しません--exclude-dir、あなたはそれを試しましたか?
jimmij

私は「unreconizedオプション」を持っている
MUYベルギー

1

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

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

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


コードは言うe#、テキストは言うe%
スティーブンラウチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.