I've occassionally wanted to know which directory in a tree has the
most files in it, rather than the most space used, which is what
"du" reports.
It's not a great script, but it works well enough. Example usage:
$ perl /tmp/dircount.pl /etc/ | sort -n | tail 25 /etc//openldap 26 /etc//fonts/conf.avail 33 /etc//pam.d 35 /etc//runlevels 45 /etc//fonts 46 /etc//conf.d 76 /etc//init.d 212 /etc//ssl/certs 228 /etc//ssl 861 /etc/
And here's the code:
#!env perl
my $indir=$ARGV[0];
if( ! "$indir" || $indir !~ m{^/} )
{
print "Input must be a single absolute path.\n";
exit 1;
}
sub dircount {
my $dir = shift;
# print "dir: $dir\n";
my $count = 0;
opendir( my $dirhandle, $dir );
foreach my $file (readdir( $dirhandle )) {
next if( $file =~ m{^..?$} );
my $new = "$dir/$file";
$new =~ s{/+}{/}g;
$count += 1;
if( -d $new && ! -l $new )
{
$count += dircount( $new );
}
}
print "$count $dir\n";
return $count;
}
dircount($indir);