Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Mac OSX no Ubuntu 9.04
Por v1llts
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Perfil removido em 29/09/2005    [ 57219 hits ]

Login: removido, 1742872 pontos

Download:


Descrição

Script simples que faz backups de acordo com a frequência que o usuario quiser, pega a lista das pastas de um arquivo e deleta os ".tar.gz" mais velhos que "n" dias, com "n" definido pelo usuario.
P.S.: tem muita coisa que dá pra melhorar, mas sou novato em shell script e estou aprendendo.


[ Download: backup.sh ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#!/bin/bash

# Script para Backup.
# Funcionamento:
# O script procura por uma pasta "$PASTA_DESTINO", onde serão guardados os
#"tarballs" das pastas compactadas. Nessa pasta ele procura por um arquivo
# chamado "pastas.conf", onde estão armazenados os caminhos completos para
# as pastas a serem "backupeadas".
# Este arquivo tem o seguinte formato:
# /etc
# /var/cache/bind
# Com um caminho completo por linha.
# Para inserir no crontab:
# crontab -e   <-- abre o crontab para edição;
# Lá no arquivo, insira a linha:
# 00 23 * * 4 /backup.sh
# que irá executar o programa "/backup.sh", toda(* *) quinta-feira(4) às
# 23 horas.

# pasta onde serão guardados os "tarballs"
PASTA_DESTINO=/backup
# tempo(em numero de dias) que os arquivos ficarão guardados na pasta de backup
TEMPO_LIMITE=28

if [ ! -d $PASTA_DESTINO ]; # testa se existe o diretorio "$PASTA_DESTINO"
then
   mkdir $PASTA_DESTINO #se não existir, cria ele...
   echo -n ** "ATENÇÂO: Pasta de backup não existe. Data: " >> /var/log/messages
   echo -n `date +%d-%m-%Y` >> /var/log/messages
   echo " Pasta "$PASTA_DESTINO " criada." >> /var/log/messages
fi

if [ ! -e $PASTA_DESTINO/pastas.conf ];
then
   echo "** ERRO: arquivo de configuração " $PASTA_DESTINO/"pastas.conf, não existe." >> /var/log/messages
   echo "** Deve ser criado, com um nome completo de pasta por linha." >> /var/log/messages
   exit 1
fi

# pega as linhas do arquivo, uma em cada volta do loop.
while read LINHA
do
   # pega o nome da pasta.
   PASTA_BACKUP=`basename $LINHA`
   # pega o caminho da pasta.
   CAMINHO_PASTA=`dirname $LINHA`
      
   # testa se existe o diretorio a ser copiado
   if [ ! -d $CAMINHO_PASTA/$PASTA_BACKUP ];
   then
      echo -n "ERRO: diretório" $CAMINHO_PASTA/$PASTA_BACKUP  "não existente!" >> $PASTA_DESTINO/erro.log
      echo " Abortando..." >> $PASTA_DESTINO/erro.log
      exit 1
   fi

   # define nomen do arquivo.
   ARQUIVO=$PASTA_BACKUP-`date +%Y-%m-%d_%H-%M-%S`-$HOSTNAME.tar.gz

   # testa se jah existe o arquivo da data atual, se existir ele cria um novo backup
   # com o horario incluido no nome do arquivo
   if [ -e $PASTA_DESTINO/$PASTA_BACKUP-`date +%Y-%m-%d`-$HOSTNAME.tar.gz ];
   then
      echo -n "ATENÇÂO: Já foi realizado um backup no dia:" >> $PASTA_DESTINO/erro.log
      echo -n `date +%d-%m-%Y` ",na pasta:" $PASTA_BACKUP >> $PASTA_DESTINO/erro.log
      tar cpzf $PASTA_DESTINO/$ARQUIVO $CAMINHO_PASTA/$PASTA_BACKUP > /dev/null 2> /dev/null
      echo -n ". Backup realizado novamente no horário: " >> $PASTA_DESTINO/erro.log
      echo `date +%H:%M:%S` >> $PASTA_DESTINO/erro.log
   else
      tar cpzf $PASTA_DESTINO/$PASTA_BACKUP-`date +%Y-%m-%d`-$HOSTNAME.tar.gz $CAMINHO_PASTA/$PASTA_BACKUP > /dev/null 2> /dev/null
   fi
   # escreve no arquivo de log($PASTA_DESTINO/backups.log)
   echo -n "*** Backup realizado da pasta " $PASTA_BACKUP  >> $PASTA_DESTINO/backups.log
   echo -n " no dia: "`date +%d-%m-%Y`", no horário: " >> $PASTA_DESTINO/backups.log
   echo -n `date +%H:%M:%S`", no host: " $HOSTNAME "***" >> $PASTA_DESTINO/backups.log
   echo "" >> $PASTA_DESTINO/backups.log
done < $PASTA_DESTINO/pastas.conf

# guarda em $DELETADOS os nomes dos arquivos que não foram alterados há mais de $TEMPO_LIMITE dias e q contenham a extensao .tar.gz
DELETADOS=`find $PASTA_DESTINO/ -ctime +$TEMPO_LIMITE | grep .tar.gz`
rm -f $DELETADOS
echo "Foram deletados os seguintes arquivos: " >> $PASTA_DESTINO/removed.log
echo $DELETADOS >> $PASTA_DESTINO/removed.log



Scripts recomendados
   Script Linux recomendado Limpar o histórico dos documentos recentes do Ubuntu 11.10
   Script Linux recomendado Cadastro de usuários
   Script Linux recomendado configurando o idesk
   Script Linux recomendado Pesquisar artigos no VOL
   Script Linux recomendado Rádios online com mplayer + Zenity

Comentários
[1] Comentário enviado por removido em 29/09/2005 - 20:56h:

Legal! ;-)


[2] Comentário enviado por removido em 29/09/2005 - 20:59h:

o que acha de usar bzip2 ao invés de gzip?
Ficava mais turbinado...
É só substituir na opção do tar os 'z's por 'j's, e a extensão dos arquivos... ;-)


[3] Comentário enviado por removido em 29/09/2005 - 21:03h:

caro eljunior, concordo que com o bzip2 fica bem mais compactado, porem, ele exige muito mais processamento que o gzip. Então, numa máquina meio lenta(comum em servidores de redes) isso pode gerar algum problema.
Como os backups sao deletados n dias depois, acho q espaco em disco nao serah um grande problema.
:D


[4] Comentário enviado por wellingtoncr em 27/08/2006 - 20:35h:

caro stumm, meus parabens pelo belo script! gostei muito da engenharia utilizada no script.. rsrs.. bem legal! parabens..


[5] Comentário enviado por mad_lord em 13/11/2006 - 16:35h:

Olá, parabéns pelo script stumm.
Fiz algumas pequenas alterações aqui nesse script para funcionar como eu queria:
alterei a opção "ctime" para "atime" na seção que deleta arquivos antigos da data tempo limite, pois aqui estavam deletando todos os arquivos quando a data liomite era atingida, com isso tive que decrementar o tempo limite definido, pois estava ficando um arquivo a mais do que o desejado:
TEMPO_LIMITE=$((TEMPO_LIMITE-1))

Bom, não sei explicar o motivo do ctime excluir todos os arquivos ao invés de somente aqueles com data expirada, mas assim funcionou.

Até.


[6] Comentário enviado por claudioveronezi em 08/01/2007 - 08:43h:

Olá, gostaria de saber como se trata um arquivo maior que 2 GBs, por exemplo... se eu quiser fazer um backup do HD todo..
tente utilizar o split com o fifo... mas nao sei como juntar os arquivos divididos... alem do que nao achei confiável o bastante.. pois trata-se de uma "gambiarra" :)
adaptacao de melhoria.. haha

att
Cláudio Veronezi Mendes


[7] Comentário enviado por kgomes07 em 16/05/2007 - 11:40h:

Olá, Gostaria de saber se vc sabe alguma linha de comando para acresentar ao seu script para excluir arquivos de video e música na hora de execultar o backup, se soube por favor me envie. Pois estou precisando urgente.
Obrigada e um grande abraço


[8] Comentário enviado por comfaa em 10/10/2008 - 09:15h:

legal o script


[9] Comentário enviado por minduim em 08/04/2009 - 14:12h:

Ola, estou com um problema e gostaria de sua ajuda, veja se é possivel: Como eu faço a converção de uma váriavel string para números?
Obrigado pela atenção.


[10] Comentário enviado por removido em 17/10/2009 - 11:14h:

Muito Bom;


[11] Comentário enviado por removido em 17/10/2009 - 22:38h:

Somente Agenda-lo no Cron e Mandar Bala



Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.