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