shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Apagar Mensagens Antigas


From: Thobias Salazar Trevisan
Subject: Re: [shell-script] Apagar Mensagens Antigas
Date: Fri, 13 Jun 2003 16:16:15 -0300 (BRT)

ae reinaldo,

** aviso! mail longo! **

On Wed, 4 Jun 2003, Reinaldo Carvalho wrote:

> --> Preciso remover as mensagens com mais de 45 dias das inbox
> de todos os usuários.
> Obs: os emails dos usuários estão no /var/spool/mail/USUARIO ,
> isto  é um arquivo qie possui as mensagens de e-mail de um
> determinado usuário.
> As mensagens são organizadas sequencialmente por ordem de
> chegada, ou seja, as mais antigas estao no final do arquivo.
> A idéia seria, abrir o arquivo, procurar até a data de 45 dias
> a atraz e remover o inicio do arquivo até então.
> Obs2: Um dos problemas é que a data esta no cabeçalho do
> e-mail. Sendo dificil sua captura para comparação.

Dei uma xuxada aqui, vê se resolve o teu problema.
Mas não se esqueça de **testar bem** antes de usá-lo no arquivo
de algum usuário &:)

Para testar simulei um arquivo:

$ cat mail_user
>From address@hidden Tue Jan 01 12:59:57 2002 -0300
yyy ada aldja das kajsd
From: none@nowhere sucks
        aqui vai o mail

>From address@hidden Tue Apr 01 12:59:57 2002 -0300
>From address@hidden Tue Apr 03 12:59:57 2002 -0300
  mais alguns     mails
>From address@hidden Tue Apr 04 12:59:57 2002 -0300
>From address@hidden Tue Apr 05 12:59:57 2002 -0300
>From address@hidden Tue Jul 30 21:33:47 2002 -0300
>From address@hidden Fri May 16 19:36:34 2003 -0300
conteudo do mail
>From address@hidden Mon May 19 18:11:05 2003 -0300

        super mouse seu amigo,
    vai salva-lo do perigo....

>From address@hidden Mon May 26 14:22:50 2003 -0300

conteudo de mais um mail        t

>From address@hidden Tue May 27 19:26:56 2003 -0300
>From address@hidden Fri May 30 22:15:03 2003 -0300
From: yy
xxxxxx yyyy ttt

>From address@hidden Fri May 30 22:40:54 2003 -0300

##########################################################

Note que o cabeçalho de início de mail começa com "From "
E os mails antigos estão no início do arquivo.

$ cat script.sh
#!/bin/bash

MOSTRA=sim
IFS="
"
mes_num(){
echo "$1" | sed "s/Jan/01/;s/Feb/02/;s/Mar/03/;s/Apr/04/;s/May/05/
s/Jun/06/;s/Jul/07/;s/Aug/08/;s/Sep/09/;s/Oct/10/;s/Nov/11/;s/Dec/12/"
}

while read l;do
DATA=$(echo "$l" |\
sed -n "s¤^From \([^ ]* \)\{2\}\([a-zA-Z]\{3\}\) \([0-9]\{1,2\}\) \
[^ ]* \([0-9]\{4\}\).*$¤\2/\3/\4¤p")
if [ $DATA ];then
        DATA=$(echo $(mes_num $DATA) |\
sed 's,\([^/]*/\)\([^/]*/\)\([^/]*\),\2\1\3,')
        echo "mail data $DATA "
        [ $(funcoeszz zzdata hoje - $DATA) -gt 45 ] && MOSTRA=nao ||
        MOSTRA=sim
fi
[ "$MOSTRA" = "sim" ] && echo "$l"
done < mail_user

##############################################################

testando:

OBS: onde tem só mail data xx/xx/xxxx são mails que irão ser
deletados

$  ./script.sh
mail data 01/01/2002
mail data 01/04/2002
mail data 03/04/2002
mail data 04/04/2002
mail data 05/04/2002
mail data 30/07/2002
mail data 16/05/2003
>From address@hidden Fri May 16 19:36:34 2003 -0300
conteudo do mail
mail data 19/05/2003
>From address@hidden Mon May 19 18:11:05 2003 -0300

        super mouse seu amigo,
    vai salva-lo do perigo....

mail data 26/05/2003
>From address@hidden Mon May 26 14:22:50 2003 -0300

conteudo de mais um mail        t

mail data 27/05/2003
>From address@hidden Tue May 27 19:26:56 2003 -0300
mail data 30/05/2003
>From address@hidden Fri May 30 22:15:03 2003 -0300
From: yy
xxxxxx yyyy ttt

mail data 30/05/2003
>From address@hidden Fri May 30 22:40:54 2003 -0300

#####################################################

o esquema dos script está em procurar linhas que começam com
"From ", e que case com a seguinte ER:

^From \([^ ]* \)\{2\}\([a-zA-Z]\{3\}\) \([0-9]\{1,2\}\) [^ ]*
\([0-9]\{4\}\).*$

Se isto ocorrer então é novo mail, este sed retornará algo como
May/16/2003

assim usamos o
DATA=$(echo $(mes_num $DATA) |\
sed 's,\([^/]*/\)\([^/]*/\)\([^/]*\),\2\1\3,')

pra trasnformar isto em 16/05/2003.

Ok, então subtraimos 'hoje' deste valor para descobrir quantos
dias já se passaram, caso seja maior que 45 não mostramos o mail. Isto
é feito no:

[ $(funcoeszz zzdata hoje - $DATA) -gt 45 ] && MOSTRA=nao || MOSTRA=sim

que altera de mail que deve ser visível para não visível.

PS: a linha:
echo "mail data $DATA "
é só para debug, quando for usar os script comente-a

Ah!, a funçõeszz você encontra em: http://aurelio.net/zz/

ufa! acabou :)
analisa o script por partes que você vai sacar a idéia.

PS: cuidado ao copiar e colar o script!

falowzz

thobias
-------
echo 9446046325380026818553633794429812592304650P | dc
-------
http://www.lcp.coppe.ufrj.br/~thobias

____________________________
|
| Against - HTML Mail
| Against - MS ATTACHMENTS
|
----------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]