Hello all. I couldn't find any utility out there to really quickly move all the current mail spools (we have well over 1500 users per machine) over to a hashed directory structure (the second type of hash, ie - "firstletter/secondletter/fullname"), so today I went ahead and wrote this quick script. Keep in mind that I make no guarantees other than that it worked great for me and helped out a LOT. Also be sure to stop POP and sendmail temporarily when you execute this. Hope this helps out some other people. At the very least it's a starting off point for your own script.
See ya. ------------------------------------------------------------- #!/usr/local/bin/perl -w ####################################################################### # # This is a script to aid in the conversion from flat directories # for email to hashed (type 2) directories # # Tim Meader - 2/25/02 # ####################################################################### use strict; #use diagnostics; use File::Copy; ##################################### # # Tests for correct usage # ##################################### if(!$ARGV[0]) { print "Incorrect usage: \"hashconv [current user mailfile directory]\"\n"; print "Exitting...\n"; exit(1); } if(!(-e $ARGV[0])) { print "The starting directory you specified does not exist!\n"; print "Exitting...\n"; exit(1); } if(!(-d $ARGV[0])) { print "The name you entered is not a directory!\n"; print "Exitting...\n"; exit(1); } if(-l $ARGV[0]) { print "The name you entered is a symbolic link. Please enter the real directory name.\n"; print "Exitting...\n"; exit(1); } if($ARGV[0] !~ /\/$/) { $ARGV[0] = $ARGV[0]."/"; } my ($curr_dir) = `pwd`; chomp $curr_dir; $curr_dir = $curr_dir."/"; if($ARGV[0] eq $curr_dir) { print "DO NOT RUN THIS PROGRAM FROM THE SAME DIRECTORY YOU SPECIFY!\n"; print "Exitting...\n"; exit(1); } ###################################### my (@mboxlist) = `ls -1 $ARGV[0]`; chomp @mboxlist; foreach (@mboxlist) { if(($_ !~ /\/$/) && !(-x $ARGV[0].$_) && ($_ ne $0)) { my ($first_letter) = substr($_, 0, 1); my ($second_letter) = substr($_, 1, 1); if(!(-e $ARGV[0].$first_letter)) { mkdir $ARGV[0].$first_letter; chmod 01777, "$ARGV[0]$first_letter"; mkdir $ARGV[0].$first_letter."/".$second_letter; chmod 01777, "$ARGV[0]$first_letter"."/"."$second_letter"; system("chown", "-R", "root:mail", "$ARGV[0]$first_letter"); print "Created FULL path \"$ARGV[0]$first_letter"."/"."$second_letter\"\n"; move($ARGV[0].$_, $ARGV[0].$first_letter."/".$second_letter."/".$_); print "Moved current mail file \"$_\" to \"$ARGV[0]$first_letter"."/"."$second_letter"."/"."$_\"\n\n"; } elsif(!(-e $ARGV[0].$first_letter."/".$second_letter)) { mkdir $ARGV[0].$first_letter."/".$second_letter; chmod 01777, "$ARGV[0]$first_letter"."/"."$second_letter"; system("chown", "root:mail", "$ARGV[0]$first_letter"."/"."$second_letter"); print "Created path \"$ARGV[0]$first_letter"."/"."$second_letter\"\n"; move($ARGV[0].$_, $ARGV[0].$first_letter."/".$second_letter."/".$_); print "Moved current mail file \"$_\" to \"$ARGV[0]$first_letter"."/"."$second_letter"."/"."$_\"\n\n"; } elsif(-e $ARGV[0].$first_letter."/".$second_letter."/".$_) { open(ORIGMAIL, ">>$ARGV[0]$_"); flock(ORIGMAIL, 2); open(NEWMAIL, "<$ARGV[0]$first_letter"."/"."$second_letter"."/"."$_"); flock(NEWMAIL, 2); foreach my $newmailline (<NEWMAIL>) { print ORIGMAIL "$newmailline\n"; } close(NEWMAIL); close(ORIGMAIL); print "File \"$ARGV[0]$first_letter"."/"."$second_letter"."/"."$_\" catted to \"$ARGV[0]$_\"\n"; copy($ARGV[0].$_, $ARGV[0].$first_letter."/".$second_letter."/".$_); print "Merged file copied!!\n\n"; } else { move($ARGV[0].$_, $ARGV[0].$first_letter."/".$second_letter."/".$_); print "ONLY moved current mail file \"$_\" to \"$ARGV[0]$first_letter"."/"."$second_letter"."/"."$_\"\n\n"; } } } exit(0); --- Tim Meader ACS-GSG - (301) 286-8013 [EMAIL PROTECTED]