--exclude-dirフラグを指定したgrepを使用して複数のディレクトリを除外する


15

grepOSXで使用している単語をRuby on Railsアプリケーションで検索していますが、特定のパターンに一致するディレクトリを除外したいと思います。

私は次のコマンドを使用しています:

grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'

このコマンドは、私が思っていたことを実行していません。私それがどのように働くと思ったのですか?

  • i-大文字と小文字を区別しない検索
  • n-パターンが見つかった行番号を出力
  • R-再帰的に検索
  • w-単語全体のみが必要です。つまり、「ディレクトリ」ではなく「直接」に一致します。
  • -E-拡張正規表現を使用
  • 'direct'-一致させたい正規表現
  • -現在のディレクトリで検索
  • --exclude-dir -E 'git | log | asset'- git、log、またはassetと一致するディレクトリを除外します。

ディレクトリを除外するという点では、コマンドはまだで検索終わる「./git」「./log」ディレクトリだけでなく、中に」./app/assets'

私は明らかに基本的な知識を欠いていますが、それが何であるかはわかりません。

回答:


16

そのオプションのマニュアルページの説明は、誤解を招くようなものです... regexのようなパターンではなく、globsのようなパターンです。ページごとに:info

--exclude-dir = GLOB

パターンGLOBに一致する名前サフィックスを持つコマンドラインディレクトリをスキップします。再帰的に検索する場合、ベース名がGLOBと一致するサブディレクトリをスキップします。GLOBの余分な末尾のスラッシュを無視します。

したがって、あなたの場合、あなたは実行することができます:

grep -inRw -E 'direct' . --exclude-dir={git,log,assets}

名前のディレクトリを除外するためにgitlogおよびassetsまたは例えば

grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}

で終わるディレクトリ名gitまたはで始まるディレクトリ名を除外しassetます。


とても興味深い。globとは何かを調べる必要があると思います。
スティーブンL.

申し訳ありませんが、これらのどれも機能していないようです。このバージョンのgrepを使用していると言ったら助かりますか:grep(BSD grep)2.5.1-FreeBSD
スティーブンL.

bsd grepのマニュアル(freebsd.org/cgi/man.cgi?query=grep&sektion=&n=1)を読んでいて、--exclude -dirの言及がないので困惑しています。ブー。
スティーブンL.

2
OK-問題が発生しました。これは、Appleシステムでのみ使用されるgrepの修正バージョンである必要があります。私はMac OS Xを使用しています。ここでの混乱についてすみません。私が投稿できるstackexchangeのどこかにフォーラムがあると確信しています。
スティーブンL.

@ user245185はBSDですか、OSXですか?両方ともここで話題になっていますが、質問を編集して、使用しているOSを教えてください。標準ツールの動作は、発見した実装ごとに異なります。
テルドン

8

--exclude-dir理解していません|

ただし、--exclude-dir除外するディレクトリごとに1回指定することで、同じ効果を得ることができます。

grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'

それは私のために働いた。ホームディレクトリを除外したいのですが、などの他のオプションでは機能しませんでした--exclude-dir={home}。私が入力したとき、私は働いていた--exclude-dir 'home'
Mubin Icyer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.