lulu

【sh: xargs ls-files】複数のディレクトリを除外してgit grep(文字列検索)する方法【gitコマンド】

やること

複数のディレクトリを検索対象から除外してgit grepする方法を解説します。

コマンド

$ git ls-files | grep -v '除外ディレクトリ 1' | grep -v '除外ディレクトリ 2' | xargs git grep <検索文字列>

上記、コマンドにて除外ディレクトリを増やしていき、それ以外のディレクトリで検索文字列をgrepすることが可能

各コマンド解説

このコマンドで使用している各コマンドを解説する

git ls-files

$ git ls-files

gitリポジトリ内のファイルを一覧で表示する

grep -v

$ grep -v '場外したいキーワード'

grep -v にて、特定のキーワードを除外できる

ex: gitリポジトリ一覧を表示して、その中からpublicというキーワードを除外したい場合

$ git ls-files | grep -v 'public'

git ls-files の結果をパイプして、grepの標準入力に渡し、publicが含まれる行を削除した内容を標準出力に出すことで、ディレクトリの除外を実現する

xargs

xargsは一つ前の標準出力を受け取って、xargsで指定したコマンドの引数にするコマンドです

ex:現在のディレクトリ配下のtestで始まる.mdファイルすべての中身をcatしたい時

$ find . -name "test*.md" | xargs cat
$ git ls-files | grep -v '除外ディレクトリ 1' | grep -v '除外ディレクトリ 2' | xargs git grep <検索文字列>

このコマンドでは、xargsにて、調べたいファイルパス一覧を受け取り、git grepの引数に渡している