flog is a script to Follow the latest log matching the filename prefix supplied, outputting updates to it as they arrive.
flog filename-prefix
This works like tail -f but switches automatically to the newest file whose name starts with the prefix supplied. I wrote this for when I need to watch the latest log in a series whose names contain a date/time-stamp or sequence number CGM.
#!/usr/bin/env tclsh
if {$argc != 1 } {
puts "Usage: $argv0 <filename-prefix>"
puts "- Follow LOG files matching prefix, outputting contents of newest as updated"
exit
}
proc newest prefix {
set lt 0
set lf {}
foreach f [glob -nocomplain -types {f r} -- $prefix*] {
if {[catch {file mtime $f} t]} continue
if {$t > $lt} {
set lt $t
set lf $f
}
}
return $lf
}
set prefix [lindex $argv 0]
set nf [newest $prefix]
while 1 {
while {$nf eq {}} {
after 1000
set nf [newest $prefix]
}
set cf $nf
puts stderr "Following: $cf"
set if [open $cf]
while {$nf eq $cf} {
if {[file size $cf] < [tell $if]} break
puts -nonewline [read $if]
after 1000
set nf [newest $prefix]
}
puts -nonewline [read $if]
close $if
}