Kısa cevap
GNU Parallel , bu tür şeyleri yapmayı gerçekten kolaylaştıran bir dizi güzel seçeneğe sahiptir:
parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log
Çıktı:
one.log: one.log içeriği burada ...
one.log: one.log içeriği burada ...
two.log: two.log içeriği burada ...
two.log: two.log içeriği burada ...
Daha fazla açıklama
- Seçenek,
--tagstring=str
her çıkış satırını str dizesiyle etiketler . Gönderen parallel
adam sayfası :
--tagstring str
Satırları bir dizeyle etiketleyin. Her bir çıktı satırı
str ve SEKME (\ t). str, {} gibi yedek dizeler içerebilir.
-u, --onall ve --nonall kullanılırken --tagstring yok sayılır.
Tüm oluşumları, {}
bu durumda günlük dosyası adları olan paralel ile değiştirilir; ie one.log
ve two.log
(sonraki tüm argümanlar :::
).
--line-buffer
Bir komutun (örn. tail -f one.log
Veya tail -f two.log
) çıkışı, komut tamamlandığında yazdırılacağı için bu seçenek gereklidir . Yana tail -f
dosya büyümesi için bekleyecek, hat bazında çıktı yazdırmak için gereklidir --line-buffer
yapar. Yine parallel
man sayfasından :
--line buffer (alfa testi)
Hat bazında arabellek çıkışı. --grup çıktıyı tutacak
bütün bir iş için birlikte. --ungroup, çıktıların
bir işten gelen yarım çizgi ve bir işten gelen yarım çizgi
başka iş. --line-buffer bu ikisinin arasına sığar: GNU paralel
tam bir çizgi yazdıracak, ancak
farklı işler.
-v
Kuyruk için (ayrıntılı) seçeneğe bakabilirsiniz . Bu, isteğinizle tam olarak eşleşmeyebilir, ancak bir başlangıçtır.