| 
									
										
										
										
											2003-10-22 03:58:58 +00:00
										 |  |  | #!/usr/bin/perl | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Script to expire voicemail after a specified number of days | 
					
						
							|  |  |  | # by Steve Creel <screel@turbs.com> | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2003-10-22 03:58:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # 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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-22 18:04:46 +00:00
										 |  |  | # Age for unheard messages (Defaults to same age for all messages) | 
					
						
							|  |  |  | # Set to 0 to not delete unheard messages | 
					
						
							|  |  |  | $unheardage = $age; | 
					
						
							| 
									
										
										
										
											2003-10-22 03:58:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-22 18:04:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Delete all files older than $age and $unheardage | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | # (named msg????.??? to get the audio and txt files, | 
					
						
							| 
									
										
										
										
											2004-06-22 18:04:46 +00:00
										 |  |  | # 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 {} \;'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2003-10-22 03:58:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # 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; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | ( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n"; | 
					
						
							| 
									
										
										
										
											2003-10-22 03:58:58 +00:00
										 |  |  | @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__
 |