Como o @epoon sugerido , o Perl pode ser uma boa escolha:
#!/usr/bin/env perl
open(FH,'<',$ARGV[0]) || die("Could not open file $ARGV[0]\n");
for (;;) {
while (<FH>) {
if (/OK UPLOAD/) { ## this is where you do your processing. As an example,
## I am collecting the file's info
/^(.+?)\s*\[pid\s*(\d+).+?\"([\d\.]+).+?\"(.+?)\".+?(\d+).+?\s([^\s]+)/;
my ($date,$pid,$client,$filename,$size,$rate) = ($1,$2,$3,$4,$5,$6);
print "On $date, process $pid uploaded file \"$filename\" of $size bytes from $client at $rate\n"
}
}
# eof reached on FH, but wait a second and maybe there will be more output
sleep 1;
seek FH, 0, 1; # this clears the eof flag on FH
}
A execução deste script em /var/log/vsftpd.log
deve fornecer resultados como
On Sat Apr 20 16:30:05 CEST 2013, process 25409 uploaded file "/20130407/09/20130407_090842D.avi" of 531792 bytes from 206.132.183.201 at 426.14Kbyte/sec
Eu ficaria feliz em atualizar isso se você especificar exatamente o que deseja fazer com as informações de registro.