Excluir/incluir archivos del comando de búsqueda de Unix según el programa

Excluir/incluir archivos del comando de búsqueda de Unix según el programa

Me pregunto si hay alguna forma de incluir o excluir archivos de los resultados de find(1) en función de la salida o el código de salida de otro programa. Específicamente, me gustaría poder ejecutar find(1) de manera que devuelva solo aquellos archivos que contengan una coincidencia positiva para una expresión regular.

Me doy cuenta de que esto se puede lograr canalizando la salida de find(1) a través de egrep, pero me gustaría poder hacerlo todo desde find(1).

Por ejemplo, ¿hay alguna forma de convertir lo siguiente en una única invocación de find(1) sin tuberías?

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

Respuesta1

-execse evalúa como "verdadero" si el comando devuelve cero (éxito):

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

Reemplace -printcon la acción de su elección.


Sin embargo, considere que esta forma egrepse ejecuta una vez porcada archivo. Comparar:

igual ~/código $ tiempo buscar -tipo f -exec grep -qs bin/env {} \; -imprimir | baño -l
60

reales 0m0.760s
usuario 0m0.104s
sistema 0m0.596s

vs.

igual ~/código $ tiempo buscar -tipo f -print0 | xargs -0 egrep -l bin/env | baño -l
60

reales 0m0.021s
usuario 0m0.003s
sistema 0m0.023s

(Probado en un repositorio Git bastante pequeño, 300 archivos, ~2,6 MB).

información relacionada