Here is a pretty fast script that finds the number of files and directories in a given path.
#!/usr/bin/perl
use strict;
my $f; # number of files
my $d; # number of dirs
sub count_files {
my ($ref) = @_;
foreach my $dir (@$ref) {
$dir = readlink $dir and chop $dir if -l $dir; # read link
next unless opendir(my $dir_h, $dir); # open dir o
+r next
my @dirs;
while (defined(my $file = readdir $dir_h)) {
if ($file eq '.' or $file eq '..') {
next;
}
if (-d "$dir/$file") {
++$d; # counting d
+irs
push @dirs, "$dir/$file";
}
elsif(-f _){
++$f; # counting f
+iles
}
}
closedir $dir_h;
count_files(\@dirs);
}
[$f, $d];
}
foreach my $arg (@ARGV) {
my @dir = -d $arg ? $arg : next;
($f, $d) = (0, 0);
print "$arg\nFiles\t: $$_[0]\nDirs\t: $$_[1]\n" for count_files(\@
+dir);
}
Usage:
$ time perl test.pl /tmp/ /usr/bin/ /media/
/tmp/
Files : 844
Dirs : 15
/usr/bin/
Files : 1564
Dirs : 3
/media/
Files : 10031
Dirs : 689
real 0m0.111s
user 0m0.030s
sys 0m0.070s