

Today I share a Perl snippet to iterate through log files in a specified directory. In this particular case there was a need to parse the log files, ignoring previously compressed files. The file names were in the format of:
file.log
file.log.1
file.log.2
file.log.3.gz
file.log.4.gz
...
file.log.10.gzThough the file names could go up to *.99, we didn’t know which, if any, would be compressed. Obviously using “*.log” wouldn’t get the *.1 or *.2 files and using “*.log*” picked up the compressed files. The solution was to use “glob” with a couple regular expressions.
Using “glob,” you can specify multiple expressions. In this case we used three:
#!/usr/bin/perl -w
use strict;
my $logpath="/var/log";
my $ext="log";
my $logfile="";
if ($#ARGV > 0) {
print "usage: loopfiles [path]\n";
exit;
}
# Overwrite default log directory via command line
if ($ARGV[0]) {
$logpath=$ARGV[0];
}
chdir($logpath) or die "$!";
my @files = glob "*.$ext *.$ext.[0-9] *.$ext.[0-9][0-9]";
foreach $logfile (@files) {
printf("%s \n",$logfile);
}