メインコンテンツへスキップ
  1. ブログ/

grepで特定のディレクトリを除外して検索する方法(--exclude-dir)

·
Linux コマンド Grep AlmaLinux
目次

grepで特定のディレクトリを除外して検索する方法(–exclude-dir)
grepで特定のディレクトリを除外して検索する方法(–exclude-dir)

コマンド早見表
#

解説は不要という方は、以下のコマンドをそのままコピーしてご利用ください。

  • 特定のディレクトリを除外して検索する
grep -r '検索文字列' --exclude-dir=<除外するディレクトリ名> <検索対象ディレクトリ>
  • 複数のディレクトリを除外して検索する
grep -r '検索文字列' --exclude-dir=<除外するディレクトリ名1> --exclude-dir=<除外するディレクトリ名2> <検索対象ディレクトリ>
  • .gitディレクトリを除外して検索する
grep -r '検索文字列' --exclude-dir=.git <検索対象ディレクトリ>

–exclude-dirオプションとは
#

grep コマンドで再帰的に検索を行う場合、--exclude-dir オプションを使うことで特定のディレクトリを検索対象から除外することができます。

exclude(エクスクルード)とは「除外する」「含めない」という意味の英単語で、プログラムや設定ファイルなどでも除外条件を指定する際によく使用される単語となります。

例えば .gitnode_modules を除外することで、不要なファイルへの検索を避け、目的の結果を効率よく見つけることができます。

基本的な使い方
#

--exclude-dir オプションの基本的な指定形式は以下となります。

grep -r '検索文字列' --exclude-dir=<除外するディレクトリ名> <検索対象ディレクトリ>

-r オプションは、指定したディレクトリ配下のサブディレクトリも含めて再帰的に検索するオプションとなります。

--exclude-dir-r-R などの再帰検索と組み合わせて使用します。

例えば、/var/www 配下から error という文字列を検索する際に、logs ディレクトリを検索対象から除外したい場合があります。

そのような場合は、以下のコマンドを実行します。

grep -r 'error' --exclude-dir=logs /var/www

複数のディレクトリを除外する
#

除外したいディレクトリが複数ある場合は、以下のように --exclude-dir を繰り返し指定します。

grep -r '検索文字列' --exclude-dir=ディレクトリ名1 --exclude-dir=ディレクトリ名2 対象ディレクトリ

例えば logscache を同時に除外する場合は以下となります。

grep -r 'error' --exclude-dir=logs --exclude-dir=cache /var/www

ワイルドカードを利用して除外する
#

--exclude-dir ではワイルドカードを利用して、条件に一致する複数のディレクトリをまとめて除外することができます。

例えば、名前が log で始まるディレクトリをすべて除外する場合は以下のように指定します。

grep -r 'error' --exclude-dir='log*' /var/www

上記の場合、logslog_backup など、log で始まるディレクトリが検索対象から除外されます。

また、名前の末尾が cache のディレクトリを除外する場合は以下のように指定できます。

grep -r 'error' --exclude-dir='*cache' /var/www

このようにワイルドカードを利用することで、複数のディレクトリを個別に指定することなく効率よく除外できます。

他オプションとの違い
#

grep コマンドには検索対象を除外するオプションとしては以下の3種類があります。

オプション 用途
--exclude パターンに一致するファイル・ディレクトリを除外する
--exclude-dir パターンに一致するディレクトリを除外する
--exclude-from 除外パターンを記述したファイルを指定しファイル・ディレクトリを除外する

--exclude-dir はディレクトリの除外に特化したオプションとなっており、ファイルの除外はできません。

ファイルとディレクトリの両方をまとめてパターンで除外したい場合は --exclude を使用してください。

また、除外したい対象が多くある場合やリストファイルで一元管理したい場合は --exclude-from を使用することで、除外パターンをファイルにまとめて指定することができます。

実用例
#

.gitディレクトリを除外してソースコードを検索する
#

ソースコードのリポジトリ内を検索する際、.git ディレクトリが検索対象に含まれると不要な結果が表示される場合があります。

以下のように .git を除外することで、ソースコードのみを対象に検索することができます。

grep -r 'ServerName' --exclude-dir=.git .

node_modulesを除外して検索する
#

Node.js のプロジェクトでは node_modules ディレクトリに大量のファイルが存在するため、検索対象に含まれると時間がかかる場合があります。

以下のように除外することで、検索速度を大幅に改善することができます。

grep -r 'error' --exclude-dir=node_modules .

バイナリファイルとディレクトリをまとめて除外する
#

-I オプションと組み合わせることで、バイナリファイルとディレクトリを同時に除外してテキストファイルのみを対象に検索することができます。

grep -rI '検索文字列' --exclude-dir=.git .

grepでバイナリファイルを除外する方法については、以下の記事もあわせてご覧ください。

grepでバイナリファイルを除外する方法|-Iオプションの使い方

関連記事
#

grepコマンドで複数条件検索する方法(AND・OR・除外)

関連記事

grepでバイナリファイルを除外する方法|-Iオプションの使い方
Grep コマンド AlmaLinux Linux
【初心者向け解説】AlmaLinuxでOSバージョンを確認する方法
Linux コマンド AlmaLinux 音声解説あり
readlinkの「-f」「-m」「-e」の違いと使い分けを図解で解説
Linux コマンド Bash
curlの--resolveオプションでDNSを使わずにリクエストを送る方法
Linux Curl コマンド DNS
Linuxのfindコマンドで検索する階層を指定する方法(-maxdepth・-mindepth)
Linux コマンド Find
Linuxのsortコマンドで重複行を削除する方法(sort -u / uniq)
Linux コマンド Sort Uniq