#!/bin/ksh set -e # fail on error # mail permission UID=sdk GID=sdk MODE=600 BACKUP=0 # if 1, bak directory will be created within maildir [[ -z $1 ]] && \ print "$0 " && exit 2 # conditions: # - filename as size S= # - filename does not end in Z (already compressed) # - file must not return gzip compressed data (already compressed) # filename is cut from the file(1) output FILES=$(cd "$1/cur/" \ && find . -iname '*,S=*[^Z]' -exec file {} \; \ | grep -v 'gzip compressed data' \ | sed 's/: /!/' \ | cut -d '!' -f 1) [[ $BACKUP != 0 ]] && mkdir "$1/bak" # loop through mail and compress appending Z # sync mtime with original file # set used,group,permissions # remove original mail (or backup) for MAIL in $FILES; do print "gzipping $1/cur/$MAIL to $1/cur/${MAIL}Z" gzip -8 -S Z "$1/cur/$MAIL" -c > "$1/cur/${MAIL}Z" touch -r "$1/cur/$MAIL" "$1/cur/${MAIL}Z" chown $UID:$GID "$1/cur/${MAIL}Z" chmod $MODE "$1/cur/${MAIL}Z" if [[ $BACKUP != 0 ]]; then mv "$1/cur/$MAIL" "$1/bak/$MAIL" else rm -f "$1/cur/$MAIL" fi done