96 lines
2.9 KiB
Perl
96 lines
2.9 KiB
Perl
|
#!/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__
|