複数のディレクトリを除外するには、--exclude-dirフラグでgrepを使用します。

複数のディレクトリを除外するには、--exclude-dirフラグでgrepを使用します。

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

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

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

コマンドは私が想像したように実行されません。私はこれですアイデア働きます:

  • - 大文字と小文字を区別しない検索
  • N- パターンが見つかった行番号を印刷します。
  • - 再帰検索
  • 勝つ- 完全な言葉が欲しい。つまり、「direct」は一致しますが、「directory」は一致しません。
  • - 金利- 拡張正規表現を使用してください。
  • 「直接」- 私がマッチングしたい正規表現
  • - 現在のディレクトリから検索
  • --exclude-dir -E 'git|log|アセット'- git、log、またはアセットと一致するディレクトリを除外します。

ディレクトリ除外に関する限り、コマンドは依然として次に終了します。'./git'そして'。 /ログディレクトリだけでなく「./アプリケーション/資産」

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

答え1

そのパターンは次のとおりです。このパターンではありません。正規表現。 ~によるとinfoページ:

--除外-ディレクトリ=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

シェルは、リストが存在する場合にのみリストを拡張します。中かっこ内には、ディレクトリ名/グローバル変数が複数ある必要があります。

答え2

--exclude-dirわからない|

--exclude-dirただし、除外する各ディレクトリに複数回指定すると、同じ効果が得られます。

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

答え3

これが私が間違ったことです。--exclude-dirパス名の代わりにディレクトリ名を入力しました。ディレクトリ名には/

以下はうまくいきます:

grep -r --exclude-dir={cache,lib} pattern /home/ /var/

以下は機能しません:

grep -r --exclude-dir={/var/cache,/var/lib} pattern /home/ /var/

答え4

以下を使用してください。

grep -inRw -E 'direct' folder/ --exclude-dir={\*git\*,\*log\*,\*assets\*}

または現在のフォルダ

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

関連情報