Che ne dici di questo, che sono riuscito a ottenere grazie, in parte, a questo post.
Volete trovare diversi file, diciamo registri con nomi diversi ma con un modello (ad esempio filename=logfile.DATE
), all'interno di diverse directory con un modello (ad esempio /logsapp1, /logsapp2
). Ogni file ha un modello che vuoi grep (ad esempio "init time"
) e vuoi avere il "init time"
file di ogni file, ma sapendo a quale file appartiene.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Quindi outputfilename.txt
sarebbe qualcosa di simile
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
In generale
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Spiegazione:
find
il comando cercherà i nomi dei file in base al modello
quindi, pipe xargs -I{}
reindirizzerà l' find
output su{}
quale sarà l'input per grep ""pattern" {}
Quindi il trucco per far grep
visualizzare i nomi dei file\dev\null
e infine, scrivere l'output nel file con tee outputfile.txt
Questo ha funzionato per me nella grep
versione 9.0.5 build 1989.
grep --version