DELETAR arquivos a X semanas passadas

Publicado por Pedro Augusto Malanga 18/04/2007

[ Hits: 11.034 ]

Download deleta.sh




Olá Galera,

Fiz um script que deleta arquivos de um diretório específico com data de criação a X semanas passadas.

Não sei se no linux já tem alguma ferramenta pronta para isso ou se alguém já fez algo semelhante, mas valeu pela diversão...

Abracos.

  



Esconder código-fonte

#!/bin/bash

## Forma de trabalhar
## ./deleta.sh caminhoARQUIVOS camilhoLOG email QuantidesDeSemanaPassadasdaAtual
## Pode haver problemas com permissoes por exemplo vc tentar executar
## este script com um usuario nao root tentando deletar dentro
## de uma pasta que somente o root em acesso.

if ([ -z  $1 ]); #|| [ -z $2 ] || [ -z $3 ] || [ -z $4 ]);
then
   clear
   echo "Voce deve passar o comando com 4 parametros";
   echo "Ex. ./deleta.sh caminho caminhodolog email qtddesemanas";
   exit
fi

clear


hora=`date +%H:%M-%D`
diretorio=$1
dias=`date +%Y%W`
log=$2
email=$3
qtd=$4

echo "Diretorio a ser varrido:" $diretorio ":: Diretorio do log: " $log;
dias=`expr $dias - $qtd`
echo "Quantida solicitadas:" $qtd ":: Semana a ser excluida: " $dias;
echo "Email do log:" $email; 


declare -a arquivos
arquivos=(`find $diretorio -type f -printf "%TY%TW:%p\\n"`)


x=0;
while [ $x != ${#arquivos[@]} ]
do
    echo "Elemento numero"
    echo $x;
    echo "Nome do arquivo dentro do array"
    echo ${arquivos[$x]};
    cortarsemana=`echo ${arquivos[$x]} | cut -f 1 -d :`
    if [ $cortarsemana == $dias ]; then
        cortar=`echo ${arquivos[$x]} |  cut -f 2 -d :`
        echo "EXCLUINDO:  " $cortar;
        rm $cortar -f 
        RETVAL=$?
          if [ $RETVAL = "1" ]
             then
               echo "Problemas ao deltar arquivo" $cortar;
               echo $hora " -- ERRO -- Problemas ao deletar" $cortar >> $log/DELETA_LOG;
               echo $hora " -- ERRO -- Problemas ao deletar" $cortar | mail -s "Testando" $email;
             else
               if [ $RETVAL = "0" ]
                  then
                    echo "Exclusao com sucesso do arquivo: " $cortar;
                    echo $hora " -- PODE -- Exclusao feita no arquivo:" $cortar >> $log/DELETA_LOG; 
                    echo $hora " -- PODE -- Exclusao feita no arquivo:" $cortar | mail -s "Testando" $email;  
             fi
           fi  
      else
        echo "Nao remover pq nao é de uma semana atras";
        echo $hora " -- NAO -- Nao remove porque nao esta dentro da data:" $cortar >> $log/DELETA_LOG;
        echo $hora " -- NAO -- Nao remove porque nao esta dentro da data:" $cortar | mail -s "Testando" $email;


    fi

    let "x = x +1"  

done

exit 
}

Scripts recomendados

Converter arquivos CBR para PDF

Prova 1.0

Monitor de usuarios

Text User Interface (TUI) com whiptail

Configuração do vim


  

Comentários
[1] Comentário enviado por Mosas em 19/04/2007 - 11:58h

Bacana o script.

existe um parametro no "find" que já te tras os arquivos que possuem + de X dias. Tipo:

find . -mtime +7

onde +7 seria a quantidade de dias desde a criação ou ultima alteração do arquivo: MAIS DE 7 DIAS

para conseguir adequa-lo a um script, use o " | cut " junto ao "find". Eu fiz assim:

find . -mtime +2 |cut -b3-50

[]s

[2] Comentário enviado por malanga em 19/04/2007 - 14:36h

Blz a dica.... eu cheguei a usar o mtime, mas preferi usar a opcao do numero da semana....

da pra fazer tambem como vc ta falando, é que eu teriamos que rodar o script no cron todos os dias sem problema nenhum, so achei melhor fazer esse lance pra pegar a semana toda de uma so vez.....

mas valeu, obrigado por comentar.

abracos.


Contribuir com comentário