DELETAR arquivos a X semanas passadas

Publicado por Pedro Augusto Malanga 18/04/2007

[ Hits: 10.840 ]

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

Firewall simples e eficaz.

Limpar pacotes com versões antigas do cache do apt

CSSH - Programa para agilizar o acesso aos servidores que você gerencia

Script para subir interface wireless

Listar bolsas disponíveis no Senac


  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts