This is a file line counter. It recursively searches for files matching given extensions and counts the total number of matched files and lines.
By default it searches using the current directory as the root and matches .pl and .pm files. If given, the first command line argument is the root folder and any following arguments are the file extensions to match (excluding the .).
Note that it will be report one line too few for each file that doesn't have a terminating new line.
use warnings; use strict; use File::Find; use File::Spec::Functions qw(rel2abs); my $root = rel2abs (shift || '.'); my @extList = @ARGV; @extList = ('pl', 'pm') if ! exists $extList[0]; my %exts; @exts{@extList} = (); my $lines = 0; my $files = 0; find (\&count, $root); print "$lines lines, $files files"; sub count { my $name = $File::Find::name; return if -d $name; my ($ext) = $name =~ /\.([^.]*)$/; return if ! defined $ext or ! exists $exts{$ext}; return if ! open inFile, '<', $name; ++$files; ++$lines while (<inFile>); close inFile; }
Update: fix ugly assignement per jdporter's reply.
In reply to Count file lines in a directory tree by GrandFather
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |