-------- Original-Nachricht --------
Datum: Fri, 9 Jan 2009 16:26:49 +0000 Von: "Andrew Oakley" andrew@aoakley.com An: dovecot@dovecot.org Betreff: [Dovecot] Bash script to mark all mail read in Maildir + Dovecot
Hi, I'm writing a script to mark all new mail read, including all mail in folders, for my system which uses Maildir and Dovecot.
The reason for this script is that I use Google Mail at work, which forwards to my SMTP/IMAP system at home. When I've finished my last check of GMail at work, I want to be able to quickly mark all mail as read at home too.
Basically this script moves everything from all /new/ directories to /cur/ directories and appends :2,S ("Seen" info status) to the filename.
It seems to work, but I'm relatively new to IMAP and Maildir. Can anyone spot any potential problems? Thanks.
I spot a issue with folders having a space in them. Then your script would not work.
----cut here---
#!/bin/bash # markallread by Andrew Oakley www.aoakley.com Public Domain 2009-01-09 # A script to mark all MAILDIR mail as read, including folders # Assumes Dovecot folder naming dot prefix eg. ~/.maildir/.foldername
# Loop through ~/.maildir/.foldername/new/ directories # This also does the ~/.maildir Inbox since it matches ~/.maildir/./new/ for i in
ls -1 ~/.maildir/.*/new/*
do # Replace /new/ with /cur/ # Also add status "seen" to message by appending :2,S to filename # as per http://cr.yp.to/proto/maildir.html mv $iecho $i | sed -r "s/^(.*)\/new\/(.*)$/\1\/cur\/\2:2,S/"
done----end cut here---
Out of my head without testing, I would do it that way: ----cut here--- #!/bin/bash find ~/.maildir/ -type d -mindepth 2 -maxdepth 2 -name "new" | while read foo do cd "${foo}" && { for bar in * do mv -iv ${bar} ../cur/${bar}:2,S done } done ----end cut here---
-- Andrew Oakley andrew@aoakley.com
Steve
-- Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger