Autor Tópico: Script Deletar Arquivos Mais de 15 dias não funciona  (Lida 5253 vezes)

Offline chiarelli

  • Usuário Ubuntu
  • *
  • Mensagens: 11
    • Ver perfil
Script Deletar Arquivos Mais de 15 dias não funciona
« Online: 30 de Maio de 2013, 23:27 »
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;
« Última modificação: 30 de Maio de 2013, 23:30 por chiarelli »

Offline jeflui

  • Usuário Ubuntu
  • *
  • Mensagens: 745
    • Ver perfil
Re: Script Deletar Arquivos Mais de 15 dias não funciona
« Resposta #1 Online: 31 de Maio de 2013, 01:48 »
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:

Código: [Selecionar]
#!/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;





Offline chiarelli

  • Usuário Ubuntu
  • *
  • Mensagens: 11
    • Ver perfil
Re: Script Deletar Arquivos Mais de 15 dias não funciona
« Resposta #2 Online: 31 de Maio de 2013, 19:16 »
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

Código: [Selecionar]
#!/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;

Offline jeflui

  • Usuário Ubuntu
  • *
  • Mensagens: 745
    • Ver perfil
Re: Script Deletar Arquivos Mais de 15 dias não funciona
« Resposta #3 Online: 31 de Maio de 2013, 23:55 »
Por exemplo:
Código: [Selecionar]
$ date +%d-%m-%Y
31-05-2013
Código: [Selecionar]
$ 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.

Offline chiarelli

  • Usuário Ubuntu
  • *
  • Mensagens: 11
    • Ver perfil
Re: Script Deletar Arquivos Mais de 15 dias não funciona
« Resposta #4 Online: 01 de Junho de 2013, 12:49 »
Por exemplo:
Código: [Selecionar]
$ date +%d-%m-%Y
31-05-2013
Código: [Selecionar]
$ 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!