
fashimpaur
User
/ Moderator
Jun 3, 2002, 8:17 AM
Post #2 of 3
(251 views)
|
|
Re: [benchivers] Dir Size, No. of Files, and Delete All.
[In reply to]
|
Can't Post
|
|
Ben, There is no single fix that handles all of your requests. I have, however, created several methods here that you may find useful. I have attached the code and the printout when I used my "c:/Novell" directory on my computer for the test. I hope you can use or modify these to fit your requirements. For quick viewing, this is the code: use strict; use Data::Dumper qw( Dumper ); $| = 1; my $directory = "c:/Novell"; my $size = 0; $size = sizeOfFilesInDirectory($directory); my $subDirCount = getSubDirectories($directory); my @subDirs = getSubDirectories($directory); print "Total size of all files in $directory: $size\n\n"; print "Number of SubDirectories: $subDirCount\n\n"; print ("SubDirectories:\n\t",join("\n\t",@subDirs),"\n\n") if $subDirCount > 0; my $dirHash = totalDirectoriesAndFiles($directory); print "Dumper output:\n\n"; print Dumper($dirHash); sub sizeOfFilesInDirectory { my $directory = shift; my $directorysize = 0; opendir DIR, $directory; my @files = grep { !(/^\.+/) && !(-d "$directory/$_") } readdir DIR; closedir DIR; foreach my $file(@files){ $directorysize += -s "$directory/$file"; } return $directorysize; } sub getSubDirectories { my $directory = shift; opendir DIR, $directory; my @dirs = grep { !(/^\.+/) && (-d "$directory/$_") } readdir DIR; closedir DIR; my $dirCount = @dirs; return wantarray?@dirs:$dirCount; } sub getFiles { my $directory = shift; opendir DIR, $directory; my @files = grep { !(/^\.+/) && !(-d "$directory/$_") } readdir DIR; closedir DIR; my $fileCount = @files; return wantarray?@files:$fileCount; } sub totalDirectoriesAndFiles { my $directory = shift; my $dircount = 0; my $filecount = 0; my $hashout = {}; my @dirs = getSubDirectories($directory); $dircount = @dirs; my @files = getFiles($directory); $filecount = @files; $hashout->{$directory} = { 'NAME' => $directory, 'SUBDIRS' => [ @dirs ], 'FILES' => [ @files ], 'SUBDIR_COUNT' => $dircount, 'FILE_COUNT' => $filecount, 'BYTES' => sizeOfFilesInDirectory($directory), }; foreach my $dir(@dirs){ my $returnedHash = totalDirectoriesAndFiles("$directory/$dir"); $hashout = { %$hashout, %$returnedHash }; } return $hashout; }
Hope this helps. Good Luck, Dennis $a="c323745335d3221214b364d545". "a362532582521254c3640504c3729". "2f493759214b3635554c3040606a0", print unpack"u*",pack "h*",$a,"\n\n";
|