Короткий ответ
В GNU Parallel есть множество приятных опций, которые позволяют очень легко делать такие вещи:
parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log
Выход будет:
one.log: содержимое one.log здесь ...
one.log: содержимое one.log здесь ...
two.log: содержимое файла two.log здесь ...
two.log: содержимое файла two.log здесь ...
Больше объяснений
- Опция
--tagstring=strпомечает каждую строку вывода строкой str . Изparallel man-страницы :
--tagstring str
Строки тегов со строкой. Каждая строка вывода будет дополнена
ул и таб (\ т). str может содержать замещающие строки, такие как {}.
--tagstring игнорируется при использовании -u, --onall и --nonall.
Все вхождения {}будут заменены аргументами параллели, которые в данном случае являются именами файлов журнала; т.е. one.logи two.log(все аргументы после :::).
Опция --line-bufferобязательна, потому что вывод команды (например, tail -f one.logили tail -f two.log) будет напечатан, если эта команда завершена. Так как tail -fбудет ждать роста файла, необходимо распечатать вывод в виде строки, что --line-bufferделает это. Снова из parallel справочной страницы :
--line-buffer (альфа-тестирование)
Вывод буфера на линейной основе. --group сохранит вывод
вместе для всей работы. --ungroup позволяет смешивать вывод с
половина строки от одной работы и половина строки от
другая работа. --line-buffer подходит между этими двумя: GNU параллельно
напечатает полную строку, но позволит смешивать строки
разные работы.
-v(подробный) вариант хвоста. Это может не совсем соответствовать вашему запросу, но это только начало.