Que tal isso, que consegui graças, em parte, a este post.
Você deseja encontrar vários arquivos, digamos logs com nomes diferentes, mas com um padrão (por exemplo filename=logfile.DATE
), dentro de vários diretórios com um padrão (por exemplo /logsapp1, /logsapp2
). Cada arquivo tem um padrão que você deseja grep (por exemplo "init time"
) e deseja ter o "init time"
de cada arquivo, mas sabendo a qual arquivo pertence.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Então, outputfilename.txt
seria 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
Em geral
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Explicação:
find
O comando pesquisará os nomes de arquivos com base no padrão
então, o pipe xargs -I{}
redirecionará a find
saída para o{}
qual será a entrada para grep ""pattern" {}
Em seguida, o truque para grep
exibir os nomes dos arquivos\dev\null
e, finalmente, escreva a saída em arquivo com tee outputfile.txt
Isso funcionou para mim na grep
versão 9.0.5 build 1989.
grep --version