Add message expiry from cron (bug #388)
[asterisk/asterisk.git] / contrib / scripts / messages-expire.pl
1 #!/usr/bin/perl
2 #
3 # Script to expire voicemail after a specified number of days
4 # by Steve Creel <screel@turbs.com>
5
6
7 # Directory housing the voicemail spool for asterisk
8 $dir = "/var/spool/asterisk/voicemail";
9
10 # Context for which the script should be running
11 $context = "default";
12
13 # Age (Delete files older than $age days old)
14 $age = 31;
15
16 # Delete all files older than $age (but named msg????.??? to be sure
17 # we don't delete greetings or the user's name)
18
19 system('find '.$dir.'/'.$context.' -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');
20
21 # For testing - what number to we start when we renumber?
22 $start = "0";
23
24 # Rename to msg and a 4 digit number, 0 padded.
25 $fnbase = sprintf "msg%04d", $start;
26
27 # Make $dir include the context too
28 $dir.="/".$context;
29
30 ( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n"; 
31 @mailboxes = `ls -A1 $dir`;
32 chomp(@mailboxes);
33
34 $save_fnbase = $fnbase;
35
36 foreach $mailbox (@mailboxes) {
37
38   ( -d $dir."/".$mailbox) || die "Can't read list of folders (".$dir."/".$mailbox."): $!\n";
39   @folders = `ls -A1 $dir/$mailbox`;
40   chomp(@folders);
41
42   foreach $folder (@folders) {
43    if (-d $dir."/".$mailbox."/".$folder) {
44     ( -d $dir."/".$mailbox."/".$folder) || die "Can't read list of messages (".$dir."/".$mailbox."/".$folder.") $!\n";
45     @files = `ls -A1 $dir/$mailbox/$folder/`;
46
47     # Sort so everything is in proper order.
48     @files = sort @files;
49     chomp(@files);
50
51     # If there is still (after deleting old files earlier in the
52     # script) a msg0000.txt, we don't need to shuffle anything
53     # in this folder.
54     if (-f $dir."/".$mailbox."/".$folder."/msg0000.txt") { next; }
55
56     foreach $ext (("WAV", "wav", "gsm", "txt")) {
57       # Reset the fnbase for each file type
58       $fnbase = $save_fnbase;
59
60       foreach $file (@files) {
61         if ( $file =~ /$ext/ ) {
62                 chdir($dir."/".$mailbox."/".$folder."/") || die "Can't change folder: $!";
63                 print "Renaming: ".$dir."/".$mailbox."/".$folder."/".$file." to ".$fnbase.".".$ext."\n";
64                 rename($file, $fnbase.".".$ext) || die "Cannot rename: $!";
65                 $fnbase++;
66         }
67       }
68     }
69    }
70   }
71 }
72
73 __END__