#!/usr/bin/perl #PURPOSE - get each users inbox & imap storage sizes use strict; use warnings; use FileHandle; print "\n"x2; inboxsize(); print "\n"x2; mailboxsize(); my %hash; my $version = '.93'; my %folderhash; sub inboxsize{ my $dir = '/var/mail'; my $alert_size = '199.99'; my $alert_mark = ' <-----'; opendir my $dh, $dir or do { warn "Cannot open '$dir' $!"; }; my ($name, $size) = ( '', '' ); my $rounded; while ( my $file = readdir $dh ) { $size = ( stat "$dir/$file" )[ 7 ] or do { # warn "Cannot stat '$dir/$file' $!"; # last; }; ($name, $size) = ($file, ($size / (1024*1024))); $rounded = sprintf('%.2f', $size); #if ($rounded >= $alert_size){$rounded=$rounded.$alert_mark}; if ($name =~ /^\./){next}; $hash{"$name"}="$rounded"; }; print "Mail Inbox sizes > $alert_size MB as of ". scalar (localtime) ."\n\n\n"; # sort by value, rather than key foreach (sort {$hash{$a} <=> $hash{$b}} keys %hash) { if ($hash{$_} >= $alert_size){write}; } print '-'x41,"\n\n"; } sub mailboxsize{ use Filesys::DiskUsage qw/du/; #my $dir = '/Big-Drive/Fedora/'; my $dir = '/home/'; my $mdir = '/mail/'; my $alert_size = '499.99'; # get the usernames and put in @array opendir(DIR,"$dir") or die "Couldn't open $dir directory!\n"; push (my @array, grep {!/^\./} readdir (DIR)); close (DIR); foreach (@array){ my $name = "$dir$_$mdir"; if (-d "$name"){ my $tot=du ({ 'sector-size' => 1024 }, qq'$name'); my $totMB = sprintf('%.2f', ($tot / (1024*1024))); $hash{"$_"}="$totMB"; } } print "Mail directory sizes > $alert_size MB as of ". scalar (localtime) ."\n\n\n"; # sort by value, rather than key foreach (sort {$hash{$a} <=> $hash{$b}} keys %hash) { if ($hash{$_} >= $alert_size){ STDOUT->format_name("STDOUT"); write; # mail directory total size # start getting folder sizes for each largemaildir user my $name = "$dir$_$mdir"; # /home/user/mail/ opendir(DIR,"$name") or die "Couldn't open $name directory!\n"; push (my @array, grep {!/^\./} readdir (DIR)); # get the folder names close (DIR); undef %folderhash; foreach (@array){ # get folder sizes and put in %folderhash # if (-f "$name$_"){ my $tot=du ({ 'sector-size' => 1024 }, qq'$name$_'); my $totMB = sprintf('%.2f', ($tot / (1024*1024))); $folderhash{"$_"}="$totMB"; # }; }; # sort by value, rather than key STDOUT->format_name("MIDDLE"); foreach (sort {$folderhash{$a} <=> $folderhash{$b}} keys %folderhash) {write} # mail folder sizes }; } print '-'x41,"\n\n"; } print "Printed by $0 version $version at ". scalar (localtime) ."\n"; format STDOUT = @<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>>> $_, $hash{$_} . format MIDDLE = @<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>>>>>> $_, $folderhash{$_} .