#!/bin/bash
#
# Autor: Filipe Vieira
#
GeraTar(){
# Cria arquivo baseado na pasta informado pelo usuario colocando a data atual no formato ANOMESDIA
# Trata o retorno do comando enviando para /dev/null, tanto erro qto sucesso
# IF para verificar se origem existe, caso exista efetua processo de backup
# Caso nao exista retorna mensagem de erro e volta para Menu
if [ -d $DPATH ]; then
mkdir -p /bkp/$DPATH # Se exisir nao gera erro
# Comando Tar utilizado para agrupar arquivos
# Opcao "u" para agrupar e se necessario efetuar o agrupapemnto com update; "f" para indicar arquivo
tar uf /bkp$DPATH/bkp_`date +"%Y%m%d"`.tar $DPATH > /dev/null 2>&1 /dev/null
# Compactador gzip para o arquivo criado
gzip /bkp$DPATH/bkp_`date +"%Y%m%d"`.tar
echo "Data de backup: " `date +"%d/%m/%Y"` > /bkp$DPATH/bkp.log
echo "Arquivos contidos no backup: " >> /bkp$DPATH/bkp.log
# Verifica os arquivos dentro do arquivo tar filtrando apenas arquivos
tar ztf /bkp$DPATH/bkp_`date +"%Y%m%d"`.tar.gz >> /bkp$DPATH/bkp.log
echo "Total: $( tar ztf /bkp/$DPATH/bkp_`date +"%Y%m%d"`.tar.gz | grep /[^"$"] | wc -l ) Arquivos" >> /bkp$DPATH/bkp.log
# If para verificar existencia do arquivo, caso tenha sido gerado gera mensagem de sucesso para o usuario usando o dialog
if [ -e /bkp$DPATH/bkp_`date +"%Y%m%d"`.tar.gz ]; then
dialog --title 'CONFIRMACAO' --msgbox 'Backup de '$DPATH' efetuado com sucesso!!!' 7 50
#Trata ok do comando anterior chamando o Menu principal
if [ $? = 0 ]; then
Main
fi
fi
else
dialog --title 'ERRO' --msgbox 'Backup de '$DPATH' nao foi efetuado favor verficar se diretorio de origem existe !!!' 7 50
Main
fi
}
# Funcao de Backup
Backup(){
# Atribui a variavel DPATH o nome do diretorio escrito pelo usuario
DPATH=$( dialog --stdout --inputbox 'Qual pasta sera feito o backup ? Ex: /home/geek ' 0 70 )
# IF trata o cancel do comando dialog voltando para o Menu principal
if [ $? = 1 ]; then
Main
else
# Procura arquivo que tenha sido alterado com a menos de uma semana
find /bkp$DPATH/*.tar* -user 7 > /dev/null 2>&1
# Trata se o arquivo foi encontrado
if [ $? = 0 ]; then
# Caso o arquivo tenha sido gerado a menos de 1 semana o comando abaixo informa o usario de que a pasta jah foi backupeada
# Dando a possibilidade do mesmo gerar o backup ou nao
OP=$( dialog --stdout --title 'ATENCAO' --yesno 'O backup desta pasta foi efetuado esta semana\nVoce tem certeza que deseja realizar o backup ?' 7 70 )
if [ $? = 0 ]; then
# Caso o usuario selecione YES chama a funcao para gerar o backup
GeraTar
else
# Caso o usuario selecione NO volta para o Menu principal
Main
fi
else
# Caso nao tenha encontrado nenhum arquivo com mais de 1 semana de geracao chama a Funcao de backup
GeraTar
fi
fi
}
Restore(){
# Atribui a variavel DPATH o nome do diretorio escrito pelo usuario
DPATH=$( dialog --stdout --inputbox 'Qual pasta voce deseja restaurar ? Ex: /home/geek ' 0 70 )
# Trata a opcao de cancel da funcao retornando para o menu principal
if [ $? = 1 ];then
Main;
else
# Verifica se o diretorio informado pelo usuario existe
if [ -d $DPATH ]; then
# Se o arquivo existir efetuara a restauracao do backup
cd /bkp$DPATH
# Tar programa utilizado para agrupamento de arquivos, utilizando as opcoes: "z" do compactador gzip; "x" opcao de extracao
tar zxf *.tar*
# Copia dos arquivos extraidos da pasta /bkp$DPATH para a pasta $DPATH utilizando a opcao "p" preservando as permissoes
# Opcao "r" de recursivo copiando diretorios e arquivos internos e opcao "u" de update de arquivo
cp -pru /bkp$DPATH$DPATH/ $DPATH
# Remove diretorio de origem da extracao
rm -rf /bkp$DPATH/$DPATH
# Caso o comando anterior tenha sido executado com sucesso apresenta a mensagem de sucesso do restore utilizando o dialog
# e retorna para o menu principal
if [ $? = 0 ]; then
dialog --title 'CONFIRMACAO' --msgbox 'Restore de '$DPATH' efetuado com sucesso!!!' 7 50
Menu
fi
else
# Caso o diretorio informado pelo o usuario nao exista eh informado a tela de erro ao usuario e retorna ao menu principal
dialog --title 'ERRO' --msgbox 'Restore de '$DPATH' nao foi efetuado favor verficar se diretorio de destino existe !!!' 7 50
Menu
fi
fi
}
# Funcao Menu apresentado chamando as funcoes de backup e restore
Menu(){
op=$( dialog --stdout --title 'Backup / Restore' \
--menu 'Escolha a opcao desejada:' \
0 0 0 \
Backup 'Efetua backup de pasta' \
Restore 'Efetua restauracao de pasta backup' )
$op # Retorna opcao do menu chamando a funcao escolhida
}
# Funcao Principal chamando a Funcao Menu apenas para organizacao prevendo alguma atualizao programa
Main(){
Menu
}
# Chamada da Funcao Main para inicio do programa... shell nao eh compilado... ou seja, pra ele entender ele tem q ler antes de executar
Main