Se eu entendi direito, é isso que você quer fazer:
find . -name '*.py' -print0 | xargs -0 grep 'something' > output.txt
Findtodos os arquivos com extensão py, grepapenas linhas que contêm somethinge salvam as linhas output.txt. Se o arquivo contiver algo, ele será substituído.
Editar: Usando -exec:
find . -name '*.py' -exec grep 'something' {} \; > output.txt
Estou incorporando o comentário de Chris Downs aqui. O comando acima resultará na grepexecução quantas vezes forem findencontradas as ocorrências. No entanto, se você substituir o ;por a +, grepserá chamado com a saída findconcatenada (até um determinado limite). Veja a pergunta Usando ponto-e-vírgula (;) vs mais (+) com exec para encontrar mais informações sobre o assunto.
+vez de\;, ele melhorará significativamente o tempo de execução (uma vez que contatenará os argumentos anteriores à execução atéARG_MAX).