[Dovecot] compression script for use with zlib module
fernando at dfcom.com.br
fernando at dfcom.com.br
Wed Sep 9 16:40:12 EEST 2009
Hi,
I´m using the following two scripts:
zip-list.sh:
find "$home" \
-type f \
-name '*,S=*' \
-mtime +1 \
-size +10k
The above script list the files that will be compressed.
zip-compressh.sh
#!/bin/bash
uid='vmail'
gid='vmail'
sleepOnFailure='2'
cat zip-list.txt|while read i
do
if [ ! -f "$i" ]
then
continue
fi
type=$(file -bi "$i")
fgrep 'message/rfc822' <<<"$type" >/dev/null
if [ "$?" != '0' ]
then
continue;
fi
echo -n "$i..."
modify=$(stat -c %y "$i"|cut -d. -f1)
basename=$(basename "$i")
gzip -9 -c "$i" >/tmp/"$basename"
mv /tmp/"$basename" "$i"
exitStatus="$?"
while [ -f "$i" -a "$exitStatus" != '0' ]
do
echo -n "wait($sleepOnFailure)..."
sleep "$sleepOnFailure"
mv /tmp/"$basename" "$i" 2>/dev/null
exitStatus="$?"
done
chown "$uid"."$gid" "$i"
touch -m -d "$modify" "$i"
echo "OK"
done
This script reads the zip-list.txt and compress the file. We do not lock
the maildir, but we use touch to maintain original dates. We do not check
any 'Z' flags.
[]s
Fernando
>
> Hi,
>
> I'm wondering if someone already implemented a compression script
> (and would like to share it) based on the step-by-step provided on wiki
> page of Zlib module.
>
> I can already do some find|xargs gzip .... but couldnt implement it
> completly as described on the wiki page. I know the suggested
> step-by-step is very detailed and probably a must simplier will be
> enough for almost anyone .... anyway, if someone have the full script
> and would like to share it, i would be glad to get it :)
>
>
> http://wiki.dovecot.org/Plugins/Zlib
>
>
> 1) Find the mails you want to compress in a single maildir.
> 2) Compress the mails to tmp/
> * Update the compressed files' mtimes to be the same as they were in
> the original files (e.g. touch command)
> 3) Run maildirlock <path> <timeout>. It writes PID to stdout, save it.
> * <path> is path to the Maildir's dovecot-uidlist (the control
> directory, if it's separate)
> * <timeout> specifies how long to wait for the lock before failing.
> 4) If maildirlock grabbed the lock successfully (exit code 0) you can
> continue.
> 5) For each mail you compressed:
> 1. Verify that it still exists where you last saw it.
> 2. If it doesn't exist, delete the compressed file. Its flags may
> have been changed or it may have been expunged. This happens rarely, so
> just let the next run handle it.
> 3. If the file does exist, rename() (mv) the compressed file over the
> original file.
> * Dovecot can now read the file, but to avoid compressing it
> again on the next run, you'll probably want to rename it again to
> include e.g. a "Z" flag in the file name to mark that it was compressed
> (e.g. 1223212411.M907959P17184.host,S=3271:2,SZ). Remember that the
> Maildir specifications require that the flags are sorted by their ASCII
> value, although Dovecot itself doesn't care about that.
> 6) Unlock the maildir by sending a TERM signal to the maildirlock
> process (killing the PID it wrote to stdout).
>
>
>
> --
>
>
> Atenciosamente / Sincerily,
> Leonardo Rodrigues
> Solutti Tecnologia
> http://www.solutti.com.br
>
> Minha armadilha de SPAM, NÃO mandem email
> gertrudes at solutti.com.br
> My SPAMTRAP, do not email it
>
More information about the dovecot
mailing list