2

の検索結果から複数のディレクトリを除外しようとしていますpcregrep

pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha .

つまり、を含むすべてのファイルを検索し、検索中にファイルを無視しalphaたいのです。動作しません。ディレクトリは除外されていません。どうしたの?./foo/abc/*./bar/cde/*

4

1 に答える 1

2

のパターンは--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フラグを導入することです。

于 2012-09-03T08:46:21.957 に答える