install_prereq: Fix check_installed_debs remove subversion
[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 # Age for unheard messages (Defaults to same age for all messages)
17 # Set to 0 to not delete unheard messages
18 $unheardage = $age;
19
20
21 # Delete all files older than $age and $unheardage
22 # (named msg????.??? to get the audio and txt files, 
23 # but we don't delete greetings or the user's name)
24
25 if($age==$unheardage) {
26
27   # Save time by doing one find if we're treating everything the same
28   system('find '.$dir.'/'.$context.' -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');
29
30 } else {
31
32   # Find everything not in a folder called 'INBOX' and delete it after $age days
33   system('find '.$dir.'/'.$context.' -path \'*INBOX*\' -prune -o -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');
34
35   # If unheardage is set to 0, we won't delete any unheard messages
36   if($unheardage > 0) {
37
38     # Delete things that are in a folder called INBOX after $unheardage days
39     system('find '.$dir.'/'.$context.' -path \'*INBOX*\' -name msg????.??? -mtime +'.$unheardage.' -exec rm {} \; -exec echo Deleted {} \;');
40
41   }
42 }
43
44 # For testing - what number to we start when we renumber?
45 $start = "0";
46
47 # Rename to msg and a 4 digit number, 0 padded.
48 $fnbase = sprintf "msg%04d", $start;
49
50 # Make $dir include the context too
51 $dir.="/".$context;
52
53 ( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n"; 
54 @mailboxes = `ls -A1 $dir`;
55 chomp(@mailboxes);
56
57 $save_fnbase = $fnbase;
58
59 foreach $mailbox (@mailboxes) {
60
61   ( -d $dir."/".$mailbox) || die "Can't read list of folders (".$dir."/".$mailbox."): $!\n";
62   @folders = `ls -A1 $dir/$mailbox`;
63   chomp(@folders);
64
65   foreach $folder (@folders) {
66    if (-d $dir."/".$mailbox."/".$folder) {
67     ( -d $dir."/".$mailbox."/".$folder) || die "Can't read list of messages (".$dir."/".$mailbox."/".$folder.") $!\n";
68     @files = `ls -A1 $dir/$mailbox/$folder/`;
69
70     # Sort so everything is in proper order.
71     @files = sort @files;
72     chomp(@files);
73
74     # If there is still (after deleting old files earlier in the
75     # script) a msg0000.txt, we don't need to shuffle anything
76     # in this folder.
77     if (-f $dir."/".$mailbox."/".$folder."/msg0000.txt") { next; }
78
79     foreach $ext (("WAV", "wav", "gsm", "txt")) {
80       # Reset the fnbase for each file type
81       $fnbase = $save_fnbase;
82
83       foreach $file (@files) {
84         if ( $file =~ /$ext/ ) {
85                 chdir($dir."/".$mailbox."/".$folder."/") || die "Can't change folder: $!";
86                 print "Renaming: ".$dir."/".$mailbox."/".$folder."/".$file." to ".$fnbase.".".$ext."\n";
87                 rename($file, $fnbase.".".$ext) || die "Cannot rename: $!";
88                 $fnbase++;
89         }
90       }
91     }
92    }
93   }
94 }
95
96 __END__