day@grand.UUCP (Dave Yost) (02/03/88)
I've been using mh since the beginning.
Here are some tips from an old hand.
Early on, Jim Guyton at Rand added this
refinement to the use of mh (with csh):
alias rmm refile +deleted
and to exponge deleted mail, this:
set mh=~/Mail
alias mexp 'cd $mh/deleted; rm *'
More recently, I have instituted automatic
exponging of my deleted messages. Every
night, +deleted messages not accessed in the
last 10 days are deleted, and the +deleted
folder is packed. Here is the shell script
that is run every night out of cron (I
control my own /usr/lib/crontab):
======
#!/bin/sh
# exponge from +deleted all messages not accessed in 10 days
# This goes in /usr/lib/crontab
# 30 5 * * * su day -c 'sh /u/day/lib/cron.sh' > /u/day/lib/cron.out 2>&1
/bin/date
PATH=/u/day/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:/etc:/usr/etc
export PATH
USER=day
export USER
HOME=/u/day
cd $HOME/Mail/deleted
x=`find . -type f -name '[123456789]*' -atime +10 -print`
echo "+rm -f $x"
rm -f $x
echo "+folder -push +deleted"
folder -push +deleted
echo "+folder -pack"
folder -pack
echo "+folder -pop"
folder -pop
======
This has made mh life a whole lot easier
for me. I hope others enjoy it.
--dave yostbd@HPLABS.HP.COM (bob desinger) (02/04/88)
> echo "+rm -f $x" > rm -f $x > echo "+folder -push +deleted" > folder -push +deleted > echo "+folder -pack" > folder -pack > echo "+folder -pop" > folder -pop This is pretty good, and it lets the system do the hard part of deciding (intelligently) which messages to prune out. You can also replace the echo lines with one line of `set -x': set -x rm -f $x folder -push +deleted folder -pack folder -pop ...to get the same effect (well, nearly the same effect; you'll have a space between the first "+" and your command with the new way but not with your original.) You may also wish to add some `&&' tokens on two lines: set -x rm -f $x folder -push +deleted && folder -pack && folder -pop The double ampersand means "if this command succeeds, do the next one; if this fails, skip the other commands." (Newlines need not be quoted after the &&.) With the old way, if the `folder -push' failed, you'd pack the current folder; with the new way, the packing will occur only if you successfully pushed +deleted onto the stack. If the push fails, neither the pack nor the pop will happen. It's a small thing, though, especially because the erroneous action is not very destructive. bob desinger
day@UUNET.UU.NET (02/04/88)
Thanks for the tip on the &&s. I routinely do the echoes instead of set -x because the latter doesn't show redirection. --dave
jerryp@AMAX.NPAC.SYR.EDU (Jerry Peek) (02/04/88)
> I routinely do the echoes instead of > set -x because the latter doesn't show > redirection. But "set -v" *does* show redirection... at least on our BSD-like Bourne shell. Have you tried it? --Jerry Peek Northeast Parallel Architectures Center; Syracuse, NY jerryp@amax.npac.syr.edu (315)423-1722
kevinc@bearcat.lim.tek.COM (Kevin Cosgrove 627-5212) (02/05/88)
Dave Yost's neat trick for expiring old messages through an 'rmm'
alias and compainion script reminded me of a trick I use myself.
I use draft folders, but in doing so I loose the outgoing drafts
each time I send another. E.g.: +drafts/1 becomes +drafts/,1 and
the next +drafts/1 overwrites +drafts/,1. From time to time people
request that I resend a message for some reason. I've been keeping
an +outbox for just this situation. My "components" include "Fcc: outbox"
which will place a folder copy there. In order to keep my +outbox
from filling up forever I added a "search and destroy" line to my ~/.logout
file to clean out old outgoing messages. Below is the command to
do this.
===========================================================
#! /bin/csh
# remove old outgoing message files, compact outgoing and incoming mail dir's
#
find ~/Mail/outbox -name "[0-9]*" -mtime +5 -exec /bin/rm {} \; |& mail kevinc &
===========================================================
Have fun!
_____________________________________________________________________________
Kevin Cosgrove Tektronix, Inc.
11K Plug-Ins Project Leader PO Box 500, M/S 47-092
LIM Product Test Engineering Beaverton, OR 97077
kevinc@bearcat.LIM.TEK.COM (503)-627-5212
_____________________________________________________________________________bd@HPLABS.HP.COM (bob desinger) (02/05/88)
> But "set -v" *does* show redirection... at least on our BSD-like Bourne shellmrose@gonzo.twg.COM (Marshall Rose) (02/05/88)
What I do in my .logout is call
packit >& /dev/null &
which is a shell script which puts everything in a file called OUTGOING
in my MH directory. Once a month I move this into my mail archives directory.
/mtr
#! /bin/sh
: packit used to be called "packf", but "pack" got changed to that
: PATH=:/bin:/usr/bin:/usr/ucb:/usr/uci:/usr/uci/lib/mh; export PATH
F="" M="" N=F
for A in $*
do
case $A in
-nov*) N=F ;;
-v*) N=T ;;
-*) echo "packit: $A unknown" 1>&2
exit 1 ;;
+*|@*) case $F in
"") F=$A ;;
*) echo "packit: only one folder at a time" 1>&2
exit 1 ;;
esac ;;
*) M="$M $A" ;;
esac
done
case $F in
"") F=+outbox ;;
esac
case $M in
"") M=all ;;
esac
prf=/tmp/prf$$ ctx=/tmp/ctx$$
trap "rm -f $prf $ctx" 0 1 2 3 13 15
rm -f $prf
echo "MH-Sequences:" > $prf
cat ${MH-$HOME/.mh_profile} >> $prf
MH="$prf" ; export MH
rm -f $ctx
cp ${MHCONTEXT-`mhpath +`/context} $ctx
MHCONTEXT="$ctx" ; export MHCONTEXT
if mhpath $F all > /dev/null;
then
P=`mhpath +`/OUTGOING
C="packf -file $P $F $M"
case $N in
T) echo $C ;;
esac
if $C;
then
C="rmm $F $M"
case $N in
T) echo $C ;;
esac
if $C;
then
exit 0;
else
exit 1;
fi
else
exit 1;
fi
else
exit 1;
fi
exit 0bd@HPLABS.HP.COM (bob desinger) (02/11/88)
(Greg Fowler pointed out that my message got rather severely truncated along the way. I think my original reply may have been truncated on my machine; we ran out of filespace in /usr/spool one night, around the time I sent this message. But on with the show.) Jerry Peek's original comment went something like this: > But "set -v" *does* show redirection... at least on our BSD-like > Bourne shell. My reply went on for a few screens showing the differences between "set -x" and "set -v". Here's the condensed version. Our Bourne shell on System V (HP-UX) does exactly what Jerry's does, so -v is the right flag to use here. Use -x when you're debugging and you want to see which lines are actually being executed. Use -v when you'd rather see the whole script, including redirection. The -x flag prints each line as it executes, omits lines that aren't executed because a condition is false, and never mentions any redirection. The -v flag prints the whole script as it's being parsed, including lines that won't be executed, and shows redirection. To be more concrete, the script: if true then echo It was true on `date` >>results else echo It was false, yow! >>results fi prints when executed with `sh -x': + true + date + echo It was true on Wed Feb 10 11:58:48 PST 1988 Notice no redirection, but trace lines showing which lines were executed (the file "results" contains what you'd expect). Using `sh -v' produces: if true then echo It was true on `date` >>results else echo It was false, yow! >>results fi This is probably closer to the output that Dave would like to see in his notification, so I agree with Jerry: use -v instead of -x. -- bd
kolding@ji.Berkeley.EDU (Eric Koldinger) (02/18/88)
I use the following shell and sed scripts to archive my old mail. It takes
everything in all my folders and compacts them into msgbox files in the
same folder that they came from. It will automatically take any file older
than 5 days (or other number of days if you specify it on the command line)
and saves them away for posterity. sed runs on the files to remove most of
the unecessary sendmail header lines. Note, this keeps the messages around
as ,X (or actually #X on our systems). You need to clean these out, but this
can easily be done with a shell script, or added to this one, if your system
doesn't delete them automatically.
-- archive shell script ---
#! /bin/csh -f
# Archive old messages in 'msgbox' file
# Purge any messages older than $days and save them in the $msgfile file
# create a $msgfile if necessary
# format:
# archive [n]
# n - age of messages to purge after {default 5}
#
# errors variable is useful for debugging
# Define default variables
set msgfile=msgbox
set errors=/dev/null
set days=5
if ($#argv != 0) then
set days=$1
endif
folders -push +inbox > $errors
foreach i (`folders -fast`)
# set the prefix and uncompress the file
set prefix=`mhpath +$i`
if { pick +$i -before -$days -sequence archive >>& $errors } then
if (-e $prefix/$msgfile.Z) then
uncompress $prefix/$msgfile.Z
set recompress='y'
else
if (-e $prefix/$msgfile) then
set recompress='n'
else
touch $prefix/$msgfile
set recompress='y'
endif
endif
# select and pack the messages
packf +$i archive -file $prefix/$msgfile >>& $errors
rmm +$i archive >>& $errors
sortm +$i >>& $errors
sed -f ~/bin/strip.sed < $prefix/$msgfile > /tmp/archive$$
mv -f /tmp/archive$$ $prefix/$msgfile
# recompress the message file
if ($recompress == 'y') then
compress $prefix/$msgfile
endif
endif
end
folders -pop >> $errors
--- strip.sed sed commands ---
/^Received:/d
/^ id /d
/^Message-Id:/d
_ /| Eric
\`o_O' kolding@ji.berkeley.edu
( ) "Gag Ack Barf" {....}!ucbvax!ji!kolding
U