Hi,
I am currently working on a perl script for my collegues that produces an output like this :
Directory /orapkg/ora002/oradata/aora02 has size 134 Mb
Directory /orapkg/ora002/oradata has size 20560 Mb
Directory /orapkg/ora002/oradata/aora01 has size 2038 Mb
Now I would like to have the size sorted on the right. The script is as follows :
sub wanted {
$dir = "$File::Find::dir";
unless ($seen{$dir}++) {
next if ( $dir =~ "lost+found" );
$dm=`du -ks $dir`;
($kb, $path) = split /\s+/, $dm ;
$mb = int( $kb / 1024 );
print "Directory $path has size\t $mb Mb\n";
}
}
I do not know exact how to do this, and it's a while ago since I did my last programming. Anyone an idea, maybe puting this into a hash and later on get the longest value would be the solution. Only I do not understand the work of hashes anymore. Can anyone assist?
I will put my complete script below for the overview. Unfortunetly I do not have File::Find::Rule so please no advise on that
. Any other remarks are more than welcome.
Regs David
#!/opt/perl/bin/perl
use File::Find;
# Determine wether argument is given or not
if (@ARGV[0]) {
$directory = "@ARGV[0]";
}
else {
usage();
}
# Searching starting at your given directory
finddepth(\&wanted, $directory);
# If this dir is unique, start getting total disk usage inclusive sub-dirs
%seen = ();
$total = ();
sub wanted {
$dir = "$File::Find::dir";
unless ($seen{$dir}++) {
next if ( $dir =~ "lost+found" );
$dm=`du -ks $dir`;
($kb, $path) = split /\s+/, $dm ;
$mb = int( $kb / 1024 );
print "Directory $path has size\t $mb Mb\n";
}
}
$total=`du -ks $directory`;
($total_size, $useless) = split /\s+/, $total;
$total_size_mb = int( $total_size / 1024 );
print "\nTotal usage of $directory is $total_size_mb Mb\n\n";
sub usage() {
print "\ndirinfo.pl: Error incorrect usage \n\n";
print "Usage: /usr/local/bin/dirinfo.pl <directory> \n";
print "\t <directory> Is directory start point to check \n\n\n";
exit 1;
}