1. ホーム
  2. linux

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

2022-03-23 18:12:10

質問

node_modules"ディレクトリを除くすべてのサブディレクトリをトラバースしたいのですが、どうすればよいですか?

どのように解決するのですか?

解決策1(組み合わせる findgrep )

本解決の目的は、このような事態に対処することではなく grep しかし、busyboxや2.5より古い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)

頻繁にコードで検索する場合。 アグ(シルバーサーチャー) は、コード検索用にカスタマイズされた、より高速なgrepの代替品です。例えば、このプログラムは .gitignore のように、面倒な exclude オプションを何度も渡す必要はありません。 grep または find .