1
我想排除的pcregrep
搜索結果的多個目錄:如何用pcregrep排除多個目錄?
pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha .
換句話說,我想找到包含alpha
的所有文件,我想搜索過程中忽略./foo/abc/*
和./bar/cde/*
文件。不起作用,目錄不被排除。怎麼了?
我想排除的pcregrep
搜索結果的多個目錄:如何用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 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
標誌。
這很傷心,謝謝你的回答 – yegor256
@ yegor256 pcregrep可以很容易地改變,以便它支持你想要的。看到我更新的答案。 – jofel