2012-09-03 78 views
1

我想排除的pcregrep搜索結果的多個目錄:如何用pcregrep排除多個目錄?

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

換句話說,我想找到包含alpha的所有文件,我想搜索過程中忽略./foo/abc/*./bar/cde/*文件。不起作用,目錄不被排除。怎麼了?

回答

1

--exclude_dir的模式僅匹配目錄名稱,而不匹配整個路徑。 因此,您不能在模式中使用/。如果要排除的目錄名稱是唯一的,你可以使用:

pcregrep --exclude_dir='^abc|cde$' -r alpha . 

請注意,你經常需要環繞圖案'或使用任何其他報價/轉義機制。在大多數情況下,您可以忽略--regex=

如果您正在使用zsh爲您的外殼,並有EXTENDED_GLOB集,您可以採用如下方案來排除整個路徑:

pcregrep alpha **/*~(foo/abc/*|bar/cde/*)(.) 

但是,您請求的功能,可以很容易地落實到pcregrep : 下載其源(pcre library)和文件pcregrep.c改變

pcre_exec(exclude_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0) 

pcre_exec(exclude_dir_compiled, NULL, buffer, (int) strlen(buffer), 0, 0, NULL, 0) 

請注意,此更改不向後兼容。最好的辦法是引入一個新的--exclude_path標誌。

+0

這很傷心,謝謝你的回答 – yegor256

+0

@ yegor256 pcregrep可以很容易地改變,以便它支持你想要的。看到我更新的答案。 – jofel