Pular para o conteúdo

DELETAR arquivos a X semanas passadas

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.
Pedro Augusto Malanga malanga
Hits: 11.189 Categoria: Shell Script Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download deleta.sh Enviar nova versão

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 
}

[Nokia-3g] Configuração do Nokia Internet Stick CS 10

Jogo campo minado em Shell Script

Descobrir IP

Simples dialog script para escolha de gerenciador de janelas

Executando comandos de telnet via shell-script

#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

Entre na sua conta para comentar.