# Traverse directories recursively using opendir() # It's as fast as you can get (I think) use strict; use warnings; use Time::HiRes; my $base_dir = "/"; my @directories; my $file_count = 0; chdir $base_dir; while($base_dir) { my @dir_contents = get_listing($base_dir); for my $sub_file (@dir_contents) { if(-d "$base_dir$sub_file" && $sub_file!~/^\.{1,2}$/) { push(@directories, "$base_dir$sub_file/"); }elsif(-f "$base_dir$sub_file") { $file_count++; } print "$base_dir$sub_file\n"; } $base_dir = shift(@directories); } my $elapsed_time = (Time::HiRes::time-$^T); print "Completed listing in: $elapsed_time seconds\n"; print "Total files: $file_count\n"; sub get_listing { my $dir = $_[0]; my @dir_contents; opendir(DIR, $dir); @dir_contents = readdir(DIR); closedir(DIR); return @dir_contents; }