ソリューション 1 (find
を組み合わせる と grep
)
このソリューションの目的は、grep
を処理することではありません パフォーマンスを向上させますが、移植可能なソリューションを示すために:2.5 より古いバージョンの busybox または GNU でも動作するはずです。
find
を使用 、ディレクトリ foo および bar を除外する場合:
find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print
次に find
を結合します grep
の非再帰的な使用 、ポータブル ソリューションとして:
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
ソリューション 2 (--exclude-dir
を使用) grep
のオプション ):
このソリューションは既にご存知ですが、最新の効率的なソリューションであるため、追加します。これは移植性が低いソリューションですが、人間が判読できることに注意してください。
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
複数のディレクトリを除外するには、--exclude-dir
を使用します として:
--exclude-dir={node_modules,dir1,dir2,dir3}
ソリューション 3 (Ag)
コードを頻繁に検索する場合、Ag (The Silver Searcher) は、コード検索用にカスタマイズされた grep よりもはるかに高速な代替手段です。たとえば、.gitignore
にリストされているファイルとディレクトリは自動的に無視されます。 、したがって、同じ面倒な除外オプションを grep
に渡し続ける必要はありません または find
.
GNU Grep の最近のバージョン (>=2.5.2) 以下を提供:
--exclude-dir=dir
パターン dir
に一致するディレクトリを除外します 再帰的なディレクトリ検索から。
できること:
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
構文と使用法の詳細については、
を参照してください。- ファイルとディレクトリの選択に関する GNU man ページ
- 関連する StackOverflow の回答 grep --exclude/--include 構文を使用して、特定のファイルを grep しない
古い GNU Grep と POSIX Grep の場合 、 find
を使用 他の回答で示唆されているように。
または ack
を使用してください (編集 :または シルバーサーチャー )そしてそれで終わりです!