Hi Gurus, I am stuck. I have thousands of jpegs in hundreds of folders and I would like to do a section by section tally of the number and file sizes of all the files.
I am using File::Find as it is quick and good at recursively searching dirs. The files are stored in folder under a letter, then a section number then the file. So A100/002 is stored in /usr2/images/a/100/002.jpg. The 'a' will often be a symlink to a different disk but that hasn't been a problem. The problem is my section tallies are either getting zero'ed or accumulating (depending on where I re-initalise the variables). So instead of getting: a Size: 6460.38MB Number: 2367 b Size: 8022.31MB Number: 3034 ...... I get: a size: 6460.38MB number:2367 b size: 0MB number:0 e size: 0MB number:0 Heres what I have done: ============== JPEG_COUNT.PL ======= #!/bin/perl use File::Find; #use strict; use diagnostics; my @dirs = qw(a b e g h m n p r s t v z); my $images_root = "/usr2/images/"; my @d; my $total_size = 0; my $total_num = 0; # Create an array of all the dirs to check. foreach my $i (@dirs) { my $toplevel = "$images_root"."$i"."/"; push(@d,$toplevel); } # Cycle through dirs and get listing. foreach my $dir (@d) { my $sect_sz = 0; my $file_size = 0; my $sect_size = 0; my $sect_num = 0; finddepth({wanted => \&find, follow=>1},$dir); sub find { if ($_ !~ /jpg/) { next; } ++$sect_num; my ($sz) = ((stat($_))[7] * 0.000001); $file_size = sprintf("%.2f",$sz); $sect_sz += $file_size; $sect_size = sprintf("%.2f",$sect_sz); # print "DEBUG: \$_=$_, $sect_size\n"; }; my ($let) = substr($dir,-2,1); print "$let size: ${sect_size}MB number:$sect_num\n"; } ========================= I could side-step this and simply do `du -k /path/to/jpegs` but I would like to know what I am doing wrong. Thanx. Dp. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>