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).grep -Hsi desea incluir el nombre de archivo del archivo en la salida.Si desea guardar todas las líneas coincidentes en todos los archivos
output.txt, su último comando funciona, excepto que le falta el requerido;al final del comando.Si desea que cada ejecución de
grepproduzca resultados en un archivo diferente, ejecute un shell para calcular el nombre del archivo de resultados y realizar la redirección.fuente
find . -name "*.py" -type f -exec grep "something" {} \; -print > output.txtY si desea ver los números de línea de las líneas grep'ed que puede, por supuesto, usargrep -n "something"Para el registro,
grephas--includey--excludeargumentos que puedes usar para filtrar los archivos que busca:fuente
grephace.Uso
tee:La advertencia, es si tiene algún archivo con caracteres especiales (incluyendo espacios) que
xargsygrepno va a funcionar bien con (a file.txtserá interpretado como dos archivos,ayfile.txt). La alternativa a eso es usar el-xo-print0, pero cualquiera de ellos contaminará suoutput.txt. Se-xutilizará\para escapar de ciertos caracteres especiales y esto estará enoutput.txt. La-print0utilizará un byte nulo como separador de campos (que también requierexargs -0) youtput.txtse verá como una larga fila contigua de texto.La forma en que trates (o no) con esto depende de ti.
fuente