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

Publicado por Alessandro Dias 16/05/2005

[ Hits: 3.764 ]

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

backup em zipdrive externo

ping alarme - avisa quando o ip esta offline e gera log

Script gera uma chave md5 de todos os arquivos que forem especificados

Gerando lista de arquivos mp3 do disco em arquivo de formato HTML

Life with qmail script


  

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