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=strher çı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.logve two.log(sonraki tüm argümanlar :::).
--line-bufferBir komutun (örn. tail -f one.logVeya tail -f two.log) çıkışı, komut tamamlandığında yazdırılacağı için bu seçenek gereklidir . Yana tail -fdosya büyümesi için bekleyecek, hat bazında çıktı yazdırmak için gereklidir --line-bufferyapar. 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.
-vKuyruk için (ayrıntılı) seçeneğe bakabilirsiniz . Bu, isteğinizle tam olarak eşleşmeyebilir, ancak bir başlangıçtır.