Wie wäre es damit, was ich teilweise dank dieses Beitrags erreichen konnte?
Sie möchten mehrere Dateien finden, beispielsweise Protokolle mit unterschiedlichen Namen, aber einem Muster (z. B. filename=logfile.DATE
), in mehreren Verzeichnissen mit einem Muster (z /logsapp1, /logsapp2
. B. ). Jede Datei hat ein Muster, das Sie erfassen möchten (z. B. "init time"
), und Sie möchten das Muster "init time"
jeder Datei haben, aber wissen, zu welcher Datei sie gehört.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Dann outputfilename.txt
wäre das so etwas wie
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
Allgemein
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Erläuterung:
find
Der Befehl durchsucht die Dateinamen anhand des Musters
Dann xargs -I{}
leitet Pipe die find
Ausgabe an die um{}
welches die Eingabe für sein wird grep ""pattern" {}
Dann der Trick, um grep
die Dateinamen anzuzeigen\dev\null
und schließlich schreiben Sie die Ausgabe in Datei mit tee outputfile.txt
Dies funktionierte für mich in grep
Version 9.0.5 Build 1989.
grep --version