Excluir/incluir arquivos do comando unix find com base no programa

Excluir/incluir arquivos do comando unix find com base no programa

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

Sei que isso pode ser feito canalizando a saída de find(1) por meio de egrep, mas gostaria de poder fazer tudo isso de dentro de find(1).

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

find . [test] | xargs egrep -l [regex]

Responder1

-execavalia como "true" se o comando retornar zero (sucesso):

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

Substitua -printpor uma ação de sua escolha.


Porém, considere que este modo egrepé executado uma vez porcada arquivo. Comparar:

igual ~/código $ tempo find -type f -exec grep -qs bin/env {} \; -imprimir | wc-l
60

reais 0m0.760s
usuário 0m0.104s
sistema 0m0.596s

vs.

igual ~/código $ hora find -type f -print0 | xargs -0 egrep -l bin/env | wc-l
60

reais 0m0.021s
usuário 0m0.003s
sistema 0m0.023s

(Testado em um repositório Git bastante pequeno, 300 arquivos, aproximadamente 2,6 MB.)

informação relacionada