の検索結果から複数のディレクトリを除外しようとしています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
フラグを導入することです。