Як щодо цього, чого мені вдалося частково подякувати цій посаді.
Ви хочете знайти декілька файлів, скажімо, журнали з різними іменами, але зразком (наприклад filename=logfile.DATE), всередині декількох каталогів з малюнком (наприклад /logsapp1, /logsapp2). Кожен файл має шаблон, який ви хочете зібрати (наприклад "init time"), і ви хочете мати "init time"кожен файл, але знаючи, до якого файлу він належить.
find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt
Тоді outputfilename.txtбуло б щось подібне
./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms
В загальному
find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt
Пояснення:
find команда буде шукати назви файлів на основі шаблону
то труба xargs -I{}буде перенаправляти findвихід на{}
який буде входом для grep ""pattern" {}
Тоді хитрість зробити grepвідображення імен файлів\dev\null
і, нарешті, запишіть вихід у файл tee outputfile.txt
Це працювало для мене у grepверсії 9.0.5 збірки 1989 року.
grep --version