aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/contrib/scripts/messages-expire.pl
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/contrib/scripts/messages-expire.pl')
-rw-r--r--trunk/contrib/scripts/messages-expire.pl96
1 files changed, 96 insertions, 0 deletions
diff --git a/trunk/contrib/scripts/messages-expire.pl b/trunk/contrib/scripts/messages-expire.pl
new file mode 100644
index 000000000..993997899
--- /dev/null
+++ b/trunk/contrib/scripts/messages-expire.pl
@@ -0,0 +1,96 @@
+#!/usr/bin/perl
+#
+# Script to expire voicemail after a specified number of days
+# by Steve Creel <screel@turbs.com>
+#
+
+# Directory housing the voicemail spool for asterisk
+$dir = "/var/spool/asterisk/voicemail";
+
+# Context for which the script should be running
+$context = "default";
+
+# Age (Delete files older than $age days old)
+$age = 31;
+
+# Age for unheard messages (Defaults to same age for all messages)
+# Set to 0 to not delete unheard messages
+$unheardage = $age;
+
+
+# Delete all files older than $age and $unheardage
+# (named msg????.??? to get the audio and txt files,
+# but we don't delete greetings or the user's name)
+
+if($age==$unheardage) {
+
+ # Save time by doing one find if we're treating everything the same
+ system('find '.$dir.'/'.$context.' -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');
+
+} else {
+
+ # Find everything not in a folder called 'INBOX' and delete it after $age days
+ system('find '.$dir.'/'.$context.' -path \'*INBOX*\' -prune -o -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;');
+
+ # If unheardage is set to 0, we won't delete any unheard messages
+ if($unheardage > 0) {
+
+ # Delete things that are in a folder called INBOX after $unheardage days
+ system('find '.$dir.'/'.$context.' -path \'*INBOX*\' -name msg????.??? -mtime +'.$unheardage.' -exec rm {} \; -exec echo Deleted {} \;');
+
+ }
+}
+
+# For testing - what number to we start when we renumber?
+$start = "0";
+
+# Rename to msg and a 4 digit number, 0 padded.
+$fnbase = sprintf "msg%04d", $start;
+
+# Make $dir include the context too
+$dir.="/".$context;
+
+( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n";
+@mailboxes = `ls -A1 $dir`;
+chomp(@mailboxes);
+
+$save_fnbase = $fnbase;
+
+foreach $mailbox (@mailboxes) {
+
+ ( -d $dir."/".$mailbox) || die "Can't read list of folders (".$dir."/".$mailbox."): $!\n";
+ @folders = `ls -A1 $dir/$mailbox`;
+ chomp(@folders);
+
+ foreach $folder (@folders) {
+ if (-d $dir."/".$mailbox."/".$folder) {
+ ( -d $dir."/".$mailbox."/".$folder) || die "Can't read list of messages (".$dir."/".$mailbox."/".$folder.") $!\n";
+ @files = `ls -A1 $dir/$mailbox/$folder/`;
+
+ # Sort so everything is in proper order.
+ @files = sort @files;
+ chomp(@files);
+
+ # If there is still (after deleting old files earlier in the
+ # script) a msg0000.txt, we don't need to shuffle anything
+ # in this folder.
+ if (-f $dir."/".$mailbox."/".$folder."/msg0000.txt") { next; }
+
+ foreach $ext (("WAV", "wav", "gsm", "txt")) {
+ # Reset the fnbase for each file type
+ $fnbase = $save_fnbase;
+
+ foreach $file (@files) {
+ if ( $file =~ /$ext/ ) {
+ chdir($dir."/".$mailbox."/".$folder."/") || die "Can't change folder: $!";
+ print "Renaming: ".$dir."/".$mailbox."/".$folder."/".$file." to ".$fnbase.".".$ext."\n";
+ rename($file, $fnbase.".".$ext) || die "Cannot rename: $!";
+ $fnbase++;
+ }
+ }
+ }
+ }
+ }
+}
+
+__END__ \ No newline at end of file