GNU/Linux >> Linux の 問題 >  >> Linux

ディレクトリを grep -R から除外するにはどうすればよいですか?

ソリューション 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 を使用してください (編集 :または シルバーサーチャー )そしてそれで終わりです!


Linux
  1. sed のバッファリングを停止するには?

  2. grep から cp に出力をパイプする方法は?

  3. Linuxからジェンキンスを完全に削除するにはどうすればよいですか

  1. recursive grep:特定のディレクトリを除外します

  2. grep 出力から一意の結果を除外するにはどうすればよいですか?

  3. ディレクトリでのみ再帰的な chmod を実行するにはどうすればよいですか?

  1. CUPS からプリンターを削除するにはどうすればよいですか?

  2. rsync を使用してデフォルトでファイルを除外するにはどうすればよいですか?

  3. .py ファイルからバイナリを取得するにはどうすればよいですか