web-dev-qa-db-ja.com

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

Ruby on Railsを使用して、OSXでgrepを使用するWordのアプリケーションを検索しています。特定のパターン。

次のコマンドを使用しています。

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

このコマンドは、私が思っていることを実行していません。これが私がどのように動作するかですthoughtそれはうまくいくでしょう:

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

除外ディレクトリに関しては、コマンドは'./ git'および'./ log'ディレクトリ、および'./app/assets'

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

18
Steven L.

そのオプションのmanページの説明は誤解を招くようなものです...globsのようなパターンはのようなパターンではありませんregexinfoページ ごと:

--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で始まるディレクトリ名を除外します。

19
don_crissti

--exclude-dir|を理解できません。

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

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