#!/bin/bash mailboxes="${HOME}/.mutt/mbsyncloop.mailboxes" do_mbsync() { # (channel) echo -e "synchronising $1 ..." mbsync $1 && echo -e "... done" || echo -e "... failed" } get_mailboxes() { # (maildir) echo -n "mailboxes \"+\"" find "$1" -type d -name cur | while read path; do mbox="$(basename $(dirname $path))" [[ $mbox == "."* ]] || continue mbox="+$mbox" echo -n " \"$mbox\"" done echo "" } update_mailboxes() { mboxes="$(get_mailboxes "$1")" [[ -f $mailboxes ]] || { echo "initially creating $mailboxes" echo -n $mboxes > "$mailboxes" return } old_mboxes="$(<$mailboxes)" [[ "$mboxes" == "$old_mboxes" ]] || { echo "updating $mailboxes" echo -n $mboxes > "$mailboxes" } } imaphost="$(awk '/^Host /{print $2}' ~/.mbsyncrc)" # sync INBOX every 10 seconds, # sync subfolders every minute cnt=0 while true; do ping -c 1 $imaphost >/dev/null 2>&1 || { echo "Host $imaphost not responding" sleep 10 continue } do_mbsync inbox [[ $((cnt % 10)) -eq 0 ]] && { cnt=0 do_mbsync folders update_mailboxes "${HOME}/.maildir" } ((cnt++)) sleep 10 done