Never been to CodeSnippets 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!)

About this user

hostmaster

1 total

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
1 total