Exclude / Incluir arquivos do comando unix find com base no programa

0

Eu estou querendo saber se existe alguma maneira de incluir ou excluir arquivos dos resultados de find (1) com base no código de saída ou saída de outro programa. Especificamente, gostaria de poder executar o find (1) de tal forma que ele retorne apenas os arquivos que contêm uma correspondência positiva para uma expressão regular.

Eu percebo que isso pode ser feito canalizando a saída do find (1) através do egrep, mas eu gostaria de poder fazer tudo a partir do find (1).

Por exemplo, existe alguma maneira de converter o seguinte em uma única invocação de find (1) sem nenhum canal?

find . [test] | xargs egrep -l [regex]
    
por Bryan Kyle 03.02.2011 / 22:11

1 resposta

2

-exec é avaliado como "verdadeiro" se o comando retornar zero (sucesso):

find . -type f -exec egrep -qs "regex" {} \; -print

Substitua -print pela ação de sua escolha.

No entanto, considere que desta forma egrep é executado uma vez para cada arquivo . Comparar:

equal ~/code $ time find -type f -exec grep -qs bin/env {} \; -print | wc -l
60

real    0m0.760s
user    0m0.104s
sys     0m0.596s

vs.

equal ~/code $ time find -type f -print0 | xargs -0 egrep -l bin/env | wc -l
60

real    0m0.021s
user    0m0.003s
sys     0m0.023s

(Testado em um pequeno repositório Git, 300 arquivos, ~ 2.6 MB.)

    
por 03.02.2011 / 22:26

Tags