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

Publicado por Alessandro Dias 16/05/2005

[ Hits: 3.629 ]

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

VNC Server Debian

Dê utilidade aquelas teclas que não servem pra nada do seu teclado

Fazer backup da trilha mbr

Projeto Wine's Faces

Rotação de Arquivos de Log


  

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