Як щодо цього, чого мені вдалося частково подякувати цій посаді.
Ви хочете знайти декілька файлів, скажімо, журнали з різними іменами, але зразком (наприклад 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