Script Deletar Arquivos Mais de 15 dias não funciona

Iniciado por chiarelli, 30 de Maio de 2013, 23:27

tópico anterior - próximo tópico

chiarelli

Olá, instalei o Ubuntu a menos de um mês em dual boot com o Windows, somente para testar o sistema. Posso dizer que não estou mais precisando do Windows para nada. Peguei o Guia FOCA do Gleydson Mazioli da Silva e fiz um instensivão.

Estava fazendo um script para fazer o backup automático da minha pasta "/home" através do programa "fsarchiver" para usar no agendador de tarefas do Linux. Estava aprimorando o script com uma função para deletar automaticamente os backups com mais de 15 dias, só que não está funcionando essa função (o restante do script está).

Alguém poderia me ajudar um ajudar? Vou postar o código da função alterando o caminho do arquivo de backup. O Arquivo segue a lógica: file://backup-$(date +"%d-%m-%Y").fsa

#!/bin/bash
#Remover Arquivos de Backup com mais de 15 dias

dia=$(date +%d)
mes=$(date +%m)
ano=$(date +%Y)
maisDuasSem=$((dia-15))

 while [ "$maisDuasSem" -gt 0 ]; do
     if ls /caminho/Backup*$maisDuasSem-*$mes-$ano*.fsa; then
         rm -f /caminho/Backup*$maisDuasSem-*$mes-$ano*.fsa;
     else maisDuasSem=1;
     fi;
     maisDuasSem=$((maisDuasSem-1));
 done;

maisUmMes=$((mes-1))
 
 while [ "$maisUmMes" -gt 0 ]; do
     if ls /caminho/Backup-*-$maisUmMes-$ano*.fsa; then
         rm -f /caminho/Backup-*-$maisUmMes-$ano*.fsa;
     else maisUmMes=1;
     fi;
     maisUmMes=$((maisUmMes-1));    
 done;

maisUmAno=$((ano-1))
 
 while [ "$maisUmAno" -gt 0 ]; do
     if ls /caminho/Backup-*-*-*$maisUmAno*.fsa; then
         rm -f /caminho/Backup-*-*-*$maisUmAno*.fsa;
     else maisUmAno=1;
     fi;
     maisUmAno=$((maisUmAno-1));    
 done;

jeflui

O problema é que se o dia for menor que 15 fica negativo e se for um dia maior quando chegar em 24-15 por exemplo, o resultado será 9 e não menos 09 como o esperado para funcionar o seu shell script.

Segue abaixo uma forma de se fazer:


#!/bin/bash

cont=30

while [ $cont -gt 15 ]; do
         rm -f backup-$(date --date "$cont day ago" +%d-%m-%Y).fsa;
         cont=$((cont-1));
done;





chiarelli

Olá jeflui, é verdade o problema sobre as datas menores que 10. Aí eu fiz uma gambiarra na função e está funcional agora... Veja o código.
Mas de qualquer jeito me explique essa parte do código que você me sugeriu "$(date --date "$cont day ago" +%d-%m-%Y)" não consegui entender direito. Eu achei esse cursinho de shell e me ajudou muito http://www.samueldiasneto.com/shell/index.html

#!/bin/bash
#Remover Arquivos de Backup com mais de 15 dias

dia=$(date +%d)
mes=$(date +%m)
ano=$(date +%Y)
maisDuasSem=$((dia-15))

  while [ $maisDuasSem -gt 9 ]; do
      if ls /home/raphael/Teste/BKP_home_user_raphael-$maisDuasSem-$mes-$ano.fsa; then
          rm -f /home/raphael/Teste/BKP_home_user_raphael-$maisDuasSem-$mes-$ano.fsa;
      #else maisDuasSem=0;
      fi;
      maisDuasSem=$((maisDuasSem-1));
  done;

  while [ $maisDuasSem -gt 0 -a $maisDuasSem -le 9 ]; do
      if ls /home/raphael/Teste/BKP_home_user_raphael-0$maisDuasSem-$mes-$ano.fsa; then
          rm -f /home/raphael/Teste/BKP_home_user_raphael-0$maisDuasSem-$mes-$ano.fsa;
      #else maisDuasSem=0;
      fi;
      maisDuasSem=$((maisDuasSem-1));
  done;

maisUmMes=$((mes-1))
 
  while [ $maisUmMes -gt 9 ]; do
      if ls /home/raphael/Teste/BKP_home_user_raphael-??-$maisUmMes-$ano.fsa; then
          rm -f /home/raphael/Teste/BKP_home_user_raphael-??-$maisUmMes-$ano.fsa;
      #else maisUmMes=0;
      fi;
      maisUmMes=$((maisUmMes-1));   
  done;

  while [ $maisUmMes -gt 0 -a $maisUmMes -le 9 ]; do
      if ls /home/raphael/Teste/BKP_home_user_raphael-??-0$maisUmMes-$ano.fsa; then
          rm -f /home/raphael/Teste/BKP_home_user_raphael-??-0$maisUmMes-$ano.fsa;
      #else maisUmMes=0;
      fi;
      maisUmMes=$((maisUmMes-1));   
  done;

maisUmAno=$((ano-1))
 
  while [ $maisUmAno -gt 1900 ]; do
      if ls /home/raphael/Teste/BKP_home_user_raphael-*-*-$maisUmAno.fsa; then
          rm -f /home/raphael/Teste/BKP_home_user_raphael-*-*-$maisUmAno.fsa;
      #else maisUmAno=0;
      fi;
      maisUmAno=$((maisUmAno-1));   
  done;

jeflui

Por exemplo:
$ date +%d-%m-%Y
31-05-2013

$ date --date "1 day ago" +%d-%m-%Y
30-05-2013


Nesse caso estamos exibindo a data já com o cálculo de 1 dia atrás, então a ideia no shell script é obter do 30º dia que se passou até o 16º , por isso a variável "cont" começa com 30.

chiarelli

Citação de: jeflui online 31 de Maio de 2013, 23:55
Por exemplo:
$ date +%d-%m-%Y
31-05-2013

$ date --date "1 day ago" +%d-%m-%Y
30-05-2013


Nesse caso estamos exibindo a data já com o cálculo de 1 dia atrás, então a ideia no shell script é obter do 30º dia que se passou até o 16º , por isso a variável "cont" começa com 30.

Muito obrigado pela ajuda!