Co powiesz na to, co udało mi się osiągnąć, częściowo dzięki temu postowi.
Chcesz znaleźć kilka plików, powiedzmy logi o różnych nazwach, ale wzorcu (np. filename=logfile.DATE
), W kilku katalogach ze wzorcem (np /logsapp1, /logsapp2
.). Każdy plik ma wzorzec, który chcesz grepować (np. "init time"
) I chcesz mieć "init time"
każdy z nich, ale wiedząc, do którego pliku należy.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Wtedy outputfilename.txt
byłoby coś takiego
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
Ogólnie
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Wyjaśnienie:
find
polecenie przeszuka nazwy plików na podstawie wzorca
następnie potok xargs -I{}
przekieruje dane find
wyjściowe do pliku{}
który będzie wejściowy dla grep ""pattern" {}
Następnie sztuczka, aby grep
wyświetlić nazwy plików\dev\null
i na koniec zapisz wynik w pliku za pomocą tee outputfile.txt
To działało dla mnie w grep
wersji 9.0.5 kompilacji 1989.
grep --version