POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGANDO MSG ANTIGAS

Publicado por Alessandro Dias 16/05/2005

[ Hits: 3.512 ]

Download delete_all_users_date_90.sh




Apaga as mensagens de todas as pastas dos usuários com mais de 90 dias, guardando as mensagens em um arquivo chamado .apagadas, a lista de pastas é exibida na tela. Esse script é executado diariamente.

  



Esconder código-fonte

#!/bin/sh
#
###############################################################################
#   Script DELETE_ALL_DATE_90.SH v1.0                                         #
#                                                                             #
#  Autor: Alessandro Dias                                                     #
###############################################################################
#
BASEDIR=/var/mail
clear
echo "*********************************************************************************************"
echo "*                           Programa DELETE_ALL_DATE_90 1.0                                 *"
echo "*********************************************************************************************"
echo "Autor: Alessandro Dias"
echo "---------------------------------------------------------------------------------------------"
k=24 # pula usuarios do sistema
USERNAME="teste" # inicializa USERNAME
TODOS=`cat /etc/passwd | cut -d : -f 1`
while [ "$USERNAME" != "" ]; do
  USERNAME=`echo $TODOS |cut -d " " -f $k`
  GRUPO=`groups $USERNAME |cut -d " " -f 3`
  if [ "$GRUPO" = "popusers" ]; then
    echo "                                ----- Usuário $USERNAME -----"
    echo -e "---------------------------------------------------------------------------------------------"
    ARQUIVOS=$BASEDIR/$USERNAME
    ARQUIVOS="$BASEDIR/$USERNAME"" "`ls /home/$USERNAME/mail/*`
    l=1
    ARQUIVO=`echo $ARQUIVOS | cut -d " " -f $l`

    while [ "$ARQUIVO" != "" -a "$ARQUIVO" != " " ]; do
      if [ "$USERNAME" != "" ]; then
        echo "Analizando o arquivo: $ARQUIVO"
       #Verifica as Msgs
       INICIO=1
       NLINHAS=1000
       i=0
       while [ "$INICIO" != "$NLINHAS" ]; do 
         i=`expr $i \+ 1`
         j=`expr $i \+ 1`
         LINHAS=`grep -n "From " $ARQUIVO | cut -d ":" -f 1`
         NLINHAS=`wc -l $ARQUIVO`
         NLINHAS=`echo $NLINHAS | cut -d " " -f 1`
         LINHAS="$LINHAS $NLINHAS"
         INICIO=`echo $LINHAS | cut -d " " -f $i`
         if [ "$INICIO" = "$NLINHAS" ]; then
           echo -e "---------------------------------------------------------------------------------------------"
         else
           FIM=`echo $LINHAS | cut -d " " -f $j`
           VALOR_TMP=`sed -n -e "$INICIO""p" $ARQUIVO`
           MES=`echo $VALOR_TMP | cut -d " " -f 4`
           ASSUNTO=`sed -n -e "$INICIO,$FIM""p" $ARQUIVO | grep "Subject:" | cut -d : -f 2`
           case $MES in
             Jan) MES=1 ;;
             Fev) MES=2 ;;
             Mar) MES=3 ;;
             Apr) MES=4 ;;
             Abr) MES=4 ;;
             May) MES=5 ;;
             Mai) MES=5 ;;
             Jun) MES=6 ;;
             Jul) MES=7 ;;
             Aug) MES=8 ;;
             Ago) MES=8 ;;
             Sep) MES=9 ;;
             Set) MES=9 ;;
             Oct) MES=10 ;;
             Out) MES=10 ;;
             Nov) MES=11 ;;
             Dez) MES=12 ;;
           esac
           VALOR_TMP=`sed -n -e "$INICIO""p" $ARQUIVO`
           DIA=`echo $VALOR_TMP | cut -d " " -f 5`
           ANO=`echo $VALOR_TMP | cut -d " " -f 7`
           HJ_ANO=`date +%Y`
           HJ_MES=`date +%m`
           HJ_DIA=`date +%e`
           DIF_ANO=`expr $HJ_ANO - $ANO`
           DIF_MES=`expr $HJ_MES - $MES`
           DIF_DIA=`expr $HJ_DIA - $DIA`
           TEMPO1=`expr $DIF_ANO \* 360`
           TEMPO2=`expr $DIF_MES \* 30`
           TEMPO3=$DIF_DIA
           TEMPO=`expr $TEMPO1 \+ $TEMPO2 \+ $TEMPO3`
           echo -e "\n   Mensagem $i - Data: $DIA/$MES/$ANO - $TEMPO dias - Linhas $INICIO-$FIM"
           echo -e "   Assunto: $ASSUNTO"
           if [ $TEMPO -ge 90 ]; then # se a msg tiver mais de 60 dias apagar
             if [ "$FIM" != "$NLINHAS" ]; then # se não é a ultima msg, não apaga a linha em branco
               FIM=`expr $FIM - 1`
             fi
             sed -n -e "$INICIO,$FIM""p" $ARQUIVO >> $ARQUIVO.apagadas
             echo " " >> $ARQUIVO.apagadas
             sed -e "$INICIO,$FIM""d" $ARQUIVO >> $ARQUIVO.tmp
             mv -f $ARQUIVO.tmp $ARQUIVO
             i=`expr $i - 1`
             j=`expr $j - 1`
             echo "   << Mensagem com mais de 90 dias  - APAGADA >>"
           fi
         fi
       done
     else 
       echo -e "\nEntre com a sintaxe correta do comando:\n./delete_date.sh <nome_usuario>\n" 
     fi
     l=`expr $l \+ 1`
     ARQUIVO=`echo $ARQUIVOS | cut -d " " -f $l`
   done
 fi
 k=`expr $k \+ 1`
done

Scripts recomendados

Conversor do VMware para o VirtualBox

Procurando um padrão num arquivo

Conversor de log SVN para RSS

MySQL remote root

VPN automática entre sites


  

Comentários
[1] Comentário enviado por diaspcf em 07/05/2007 - 15:21h

Caro Usuário,
Tente pegar o script a partir do código fonte, pois parece que o link está quebrado.
Obrigado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts