Si te entiendo correctamente, esto es lo que quieres hacer:
find . -name '*.py' -print0 | xargs -0 grep 'something' > output.txt
Findtodos los archivos con extensión py, grepsolo las filas que contienen somethingy guardan las filas output.txt. Si el archivo contiene algo, será reemplazado.
Editar: Usando -exec:
find . -name '*.py' -exec grep 'something' {} \; > output.txt
Estoy incorporando el comentario de Chris Downs aquí. El comando anterior dará como resultado que grepse ejecute tantas veces como findencuentre ocurrencias. Sin embargo, si reemplaza el ;con a +, grepse llama con la salida de findconcatenado (hasta cierto límite). Vea la pregunta Usando punto y coma (;) vs plus (+) con exec en find para más información sobre el tema.
+lugar de\;mejorará significativamente el tiempo de ejecución (ya que contaminará los argumentos antes de la ejecución hastaARG_MAX).