の検索結果から複数のディレクトリを除外しようとしていますpcregrep:
pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha .
つまり、を含むすべてのファイルを検索し、検索中にファイルを無視しalphaたいのです。動作しません。ディレクトリは除外されていません。どうしたの?./foo/abc/*./bar/cde/*
のパターンは--exclude_dir、パス全体ではなく、ディレクトリ名のみに一致します。/したがって、パターンの内側を持つことはできません。除外するディレクトリ名が一意である場合は、次を使用できます。
pcregrep --exclude_dir='^abc|cde$' -r alpha .
'多くの場合、パターンを他の引用/エスケープメカニズムで囲むか、使用する必要があることに注意してください。ほとんどの場合、省略できます--regex=。
シェルとして使用zshしていて、EXTENDED_GLOBが設定されている場合は、次のソリューションを使用してパス全体を除外できます。
pcregrep alpha **/*~(foo/abc/*|bar/cde/*)(.)
ただし、要求した機能はpcregrepに簡単に実装できます。ソース(pcreライブラリ)をダウンロードして変更します。
pcre_exec(exclude_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0)
ファイルpcregrep.cに
pcre_exec(exclude_dir_compiled, NULL, buffer, (int) strlen(buffer), 0, 0, NULL, 0)
この変更には下位互換性がないことに注意してください。最善の方法は、新しい--exclude_pathフラグを導入することです。