Never been to TextSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

« Newer Snippets
Older Snippets »
2 total  XML / RSS feed 

script for migrating from UW-IMAP to Dovecot [PATCHED]

#!/bin/bash

# A script for migrating from UW-IMAP to Dovecot
#
# By Andrew Ziem
# Copyright (c) 2007 Springs Rescue Mission.  All rights reserved.
#
#
# Moves UW-IMAP mboxes from two locations to ~/mail so that Dovecot
# can easily convert mboxes to Maildirs.  Mailboxes with whitespace
# should be handled properly, and IMAP subscriptions should be preserved.
#
#


# Edit the below variables

#HOME_USERS=/home
HOME_USERS=/home/users

#MAIL_SPOOL=/var/mail
MAIL_SPOOL=/var/spool/mail



# to this function pass the user name
function move_mailboxlist
{
        if [ ! -d "$HOME_USERS/$1" ];
        then
                echo "Error: $HOME_USERS/$1 does not exist"
                return 0
        fi

        # make ~/mail
        cd "$HOME_USERS/$1"
        mkdir mail
        chown "$1" mail

        # find each mbox and move it to ~/mail
        if [ ! -f ".mailboxlist" ];
        then
                echo "Warning: .mailboxlist does not exist for $1"
                return 0
        fi
        
        # cat .mailboxlist | while read line; do mv "${line}" ./mail/; done
        cat .mailboxlist | tr '\n' '\0' | xargs -0 mv -t ./mail/

        # preserve subscriptions (to prevent manual resubscriptions)
        mkdir Maildir
        chown "$1" Maildir
        cp -a .mailboxlist Maildir/subscriptions
}

# move inbox from $MAIL_SPOOL to ~/mail/inbox
function move_inbox
{
        if [ ! -f "${MAIL_SPOOL}/$1" ];
        then
                echo "Error: ${MAIL_SPOOL}/$1 does not exist"
                return 0
        fi
        cp "${MAIL_SPOOL}/$1" "${HOME_USERS}/$1/mail/inbox"
        chown "$1" "${HOME_USERS}/$1/mail/inbox"
}

if [ $# -eq 0 ];
then
        echo "First, did you edit the directory names in the script?"
        echo "Then, if you want to do a dry run, prefix mv and cp with echo."
        echo "Then, invoke $0 by passing one or more user names."
        exit
fi

for user in $@
do
        echo "*** Processing user $user"
        move_mailboxlist $user
        move_inbox $user
done

Measure the daily number of E-mail messages in a mailbox

This snippet written in bash with calls to perl from the command line measures the number of E-mail messages sent to a mailbox per calendrical day.

#!/bin/bash
grep -h '^Date:' * |
    perl -pe 's!^Date: !!' |
    perl -pe 's!^\w\w\w, !!' |
    perl -pe 's{\d{2}:\d{2}:\d{2}.*$}{}' |
    perl -pe 's!^\s+!!' |
    perl -pae '$_=sprintf("%.2d-%s-%s\n", @F)' |
    sort | uniq -c | sort -n


I used perl for some places where sed would have been more suitable because I find the sed regexp syntax confusing. :-)
« Newer Snippets
Older Snippets »
2 total  XML / RSS feed