¿Qué tal esto, que logré lograr gracias, en parte, a esta publicación?
Desea encontrar varios archivos, digamos registros con diferentes nombres pero con un patrón (por ejemplo filename=logfile.DATE
), dentro de varios directorios con un patrón (por ejemplo /logsapp1, /logsapp2
). Cada archivo tiene un patrón que desea grep (por ejemplo "init time"
), y desea tener el "init time"
de cada archivo, pero sabiendo a qué archivo pertenece.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Entonces el outputfilename.txt
sería algo como
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
En general
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Explicación:
find
el comando buscará los nombres de archivo basados en el patrón
entonces, la tubería xargs -I{}
redirigirá la find
salida a la{}
cual será la entrada para grep ""pattern" {}
Luego el truco para hacer grep
mostrar los nombres de archivo\dev\null
y finalmente, escriba la salida en el archivo con tee outputfile.txt
Esto funcionó para mí en la grep
versión 9.0.5, compilación 1989.
grep --version