backup interativo em dialog
Publicado por Perfil removido (última atualização em 05/10/2012)
[ Hits: 11.245 ]
Este script em shell foi feito com o proposito de criar backups NÃO AUTOMATIZADOS, permitindo que o usuário preencha informações da forma que desejar.
O tamanho do script pode assustar os principiantes, mas é bem simples. Alterem seu conteúdo conforme sua necessidade, seja para interagir ou para automatizar o backup.
#!/bin/bash
#########################################################################################################
############################## #########################################
################## backup.sh #################################
############################## #########################################
#########################################################################################################
#########################################################################################################
#########################################################################################################
######## O nome do script é backup.sh #########
######## Desenvolvido por Edson de Abreu Oliveira. #########
######## Versão: 2.0 #########
######## Atualizado em 12/09/2012 #########
######## -------------------------------------------------------------------------------------- #########
######## Script para ser executado em distros baseadas no debian, no proprio debian e CentOS #########
######## Este script faz backups de arquivos e diretórios salvando localmente e remotamente. #########
######## O script usa funções para ser executado. #########
######## a função iniciar é para iniciar o script. #########
######## a função parar é para parar o script. #########
######## Existe outras funções que tem a finalidade de inciar uma tarefa especifica #########
######## Dentro da função start existe outras funções para fazer backups tais como #########
######## Backup completo, backup de dados alterados recentemente #########
######## backup remoto e funções para resturar cada tipo de backup feito. #########
#########################################################################################################
#########################################################################################################
data=$(date +%d-%m-%Y)
iniciar()
{
#############################################################
############# Verifica Requisitos do sistema ################
#############################################################
if [ -e $(which dd) -a -e $(which tar) -a -e $(which gzip) -a -e $(which dialog) -a -e $(which rsync) ]; then
dialog --infobox ' checando sistema... ' 3 30
sleep 2
else
echo "checando sistema..."
echo -e "Pacotes necessários para script:{FONTE}33[31;1mrsync dialog gzip coreutils tar{FONTE}33[m,instale os pacotes para rodar sem problemas"
exit 2
fi
###################################################
########### Tela de apresentação do script #######
###################################################
NU=$( dialog --stdout --title 'OPÇÕES' --menu 'Escolha o tipo de backup ou restauração:' 0 0 0 \
bkp-com '- Backup Completo' \
bkp-inc '- Backup de dados alterados recentemente' \
bkp-rem '- Backup Remoto - salvar remotamente' \
rest-bkp '- Restauração' \
rest-rem '- Restauração de backup remoto' \
sair '- Sair do script' )
[ -n "$NU" ] && OP="$NU" || OP=$(($NU + 1))
case $OP in
bkp-com)bkp-com;;
bkp-inc)bkp-inc;;
bkp-rem)bkp-rem;;
rest-bkp)rest-bkp;;
rest-rem)rest-rem;;
sair)dialog --title "Opção escolhida" --infobox 'saindo do script' 3 20;exit 1;;
1)dialog --title "CANCELAMENTO" --infobox 'O Botão CANCELAR foi apertado ou ESC foi presionado. saindo do script' 3 60;exit 1;;
*) echo "Opção Inválida!!!";iniciar;;
esac
}
#################################################################################################
#################################################################################################
################ Backup Comnpleto de arquivos e ou diretorios #################
#################################################################################################
#################################################################################################
bkp-com()
{
dialog --title "Opção" --infobox ' Você escolheu a opção para fazer backup Completo de seus arquivos ' 3 75
sleep 2
###################################################################################################
# Entrada de informação: nome do backup, local de origem, local de destino, exclude e verificação #
###################################################################################################
arq=$(dialog --stdout --ok-label "OK" --inputbox "Digite o nome do backup" 0 0)
pat=$(dialog --stdout --title "Escolha o local de origem do backup" --ok-label "OK" --dselect / 10 70)
patd=$(dialog --stdout --title "Escolha o local de destino do backup" --ok-label "OK" --dselect / 10 70)
excluir=$(dialog --stdout --title "Escolha o diretório que deseja não incluir no backup" --ok-label "OK" --dselect $pat 10 70)
###############################################
# Verifica se o valor das variáveis são nulas #
###############################################
if [ -z "$arq" -o -z "$pat" -o -z "$patd" ];then
dialog --infobox "informação insuficiente, saindo do script..." 3 60
exit 1
fi
#####################################################
# Verifica se os locais de origem e destino existem #
#####################################################
if [ -e "$pat" -a -e "$patd" ];then
sleep 0.23
else
dialog --infobox "Local de origem ou destino não existe, saindo do script" 3 75
exit 1
fi
###########################################
# Criando e Compactando arquivo do backup #
###########################################
if [ -z $excluir ];then
tar -zpcvf "$patd"/"$arq"-"$data".tar.gz "$pat" 2> /dev/null |dialog --progressbox " Dados sendo copiados e compactados:" 30 140
sleep 2
else
tar --exclude $excluir -zpcvf "$patd"/"$arq"-"$data".tar.gz "$pat" 2> /dev/null |dialog \
--progressbox " Dados sendo copiados e compactados:" 30 140
sleep 2
fi
#########################################
# verifica se o backup foi feito ou não #
#########################################
if test -e "$patd"/"$arq"-"$data".tar.gz;then
dialog --title 'Tamanho do Backup' --infobox " Tamanho do backup é:$(du -h "$patd"/"$arq"-"$data".tar.gz)" 3 35
sleep 4
dialog --infobox 'Backup concluido com exeto...' 3 35
exit 0
else
dialog --title "Erro" --infobox " backup não foi conlcuido com êxito " 3 35
exit 1
fi
}
#########################################################################################
#########################################################################################
############# Backup de dados alterados recentemente #################
#########################################################################################
#########################################################################################
bkp-inc()
{
dialog --title "Opção" --infobox 'Você escolheu a opção para fazer backup de dados criados e ou alterados recentemente' 3 95
sleep 2
##########################################################################################
######################## Entrada de dados para fazer backup ##############################
##########################################################################################
arq=$(dialog --stdout --ok-label "OK" --inputbox "Digite o nome do backup" 0 0)
pat=$(dialog --stdout --ok-label "OK" --title "Escolha o diretório de origem de backup" --dselect / 10 70)
patd=$(dialog --stdout --ok-label "OK" --title "Escolha de diretório para gravação de backup" --dselect / 10 70)
###############################################
# Verifica se o valor das variáveis são nulas #
###############################################
if [ -z "$arq" -o -z "$pat" -o -z "$patd" ];then
dialog --infobox "informação insuficiente, saindo do script..." 3 60
exit 1
fi
#####################################################
# Verifica se os locais de origem e destino existem #
#####################################################
if [ -e "$pat" -a -e "$patd" ];then
sleep 0.23
else
dialog --infobox "Local de origem ou destino não existe, saindo do script" 3 75
exit 1
fi
########################
#### Fazendo backup ####
########################
find "$pat" -mtime -7 -type f -print |tar -zcpvf "$patd"/"$arq"-"$data".tar.gz -T - |dialog \
--progressbox "Dados sendo copiados e empacotados:" 30 140
#########################################
# verifica se o backup foi feito ou não #
#########################################
if test -e "$patd"/"$arq"-"$data".tar.gz;then
dialog --title 'Tamanho do Backup' --infobox " Tamanho do backup é:$(du -h "$patd"/"$arq"-"$data".tar.gz)" 3 35
sleep 4
dialog --infobox 'Backup concluido com exeto...' 3 35
exit 0
else
dialog --title "Erro" --infobox " backup não foi conlcuido com êxito " 3 35
exit 1
fi
}
#################################################################################################
#################################################################################################
######################## Backup Remoto #################################
#################################################################################################
#################################################################################################
bkp-rem()
{
dialog --title "Opção" --infobox ' Você escolheu a opção para fazer backup e salvar em um host remoto' 3 75
sleep 2
##########################################################################################
######################## Entrada de dados para fazer backup ##############################
##########################################################################################
texto="Insira o endereço do host remoto que salvará o backup, porta de acesso do ssh, diretório de destino e o nome do usuário que irá logar e salvar as alterações. NOTA: faça login com um usuário que tenha permissão de gravação no diretório do host remoto"
ent=$(dialog --stdout \
--ok-label "OK" \
--title "Dados de entrada" \
--form "$texto" 16 70 4 \
"IP do host" 1 1 "" 1 20 50 0 \
"Porta" 2 1 "22" 2 20 50 0 \
"Local de Destino" 3 1 "" 3 20 50 0 \
"Usuário" 4 1 "$USER" 4 20 50 0 )
IP=$(echo "$ent" |head -1)
PORT=$(echo "$ent" |head -2 |tail -1)
patd=$(echo "$ent" |head -3 |tail -1)
usu=$(echo "$ent" |tail -1)
#####################################
### Verificando dados de entrada ####
#####################################
if [ -z "$ent" ];then
dialog --infobox "Operação cancelada, saindo do script" 3 60
exit 1
elif [ -z "$IP" -o -z "$PORT" -o -z "$usu" ];then
dialog --infobox "informação insuficiente, saindo do script..." 3 60
exit 1
fi
arq=$(dialog --stdout --ok-label "OK" --inputbox "Digite o nome do backup" 0 0)
pat=$(dialog --stdout --ok-label "OK" --title "Escolha o diretório de origem de backup" --dselect / 10 70)
###############################################
# Verifica se o valor das variáveis são nulas #
###############################################
if [ -z "$arq" -o -z "$pat" ];then
dialog --infobox "informação insuficiente, saindo do script..." 3 60
exit 1
fi
#####################################################
# Verifica se os locais de origem e destino existem #
#####################################################
if [ -e "$pat" -a "$(echo "$(ssh -p "$PORT" "$usu"@"$IP" [ -e "$patd" ] && echo "0" || echo "1")")" -eq "0" ];then
sleep 0.23
else
dialog --infobox "Local de origem ou destino não existe, saindo do script" 3 75
exit 1
fi
########################
#### Fazendo backup ####
########################
tar -zcpvf - "$pat" 2> /dev/null | ssh -p "$PORT" "$usu"@"$IP" dd of="$patd"/"$arq"-"$data".tar.gz > /dev/null
#########################################
# verifica se o backup foi feito ou não #
#########################################
if [ "$(echo "$(ssh -p "$PORT" "$usu"@"$IP" [ -e "$patd"/"$arq"-"$data".tar.gz ] && echo "0" || echo "1")")" -eq "0" ];then
dialog --title 'Tamanho do Backup' \
--infobox " Tamanho do backup é:$(ssh -p "$PORT" "$usu"@"$IP" du -h "$patd"/"$arq"-"$data".tar.gz)" 3 35
sleep 3
dialog --infobox 'Backup concluido com exeto...' 3 35
exit 0
else
dialog --title "Erro" --infobox " backup não foi conlcuido com êxito " 3 35
exit 1
fi
}
################################################################################################
################################################################################################
#### Restauração do Backups completos e de dados alterados recentemente #####
################################################################################################
################################################################################################
rest-bkp()
{
#########################################################################################################
# questiona o usuário qual arquivo contém os dados a serem restaurados e aonde serão restaurados #
#########################################################################################################
dialog --title "Opção" --infobox 'Você escolheu a opção para restaurar um backup completo e de dados alterados recentemente' 3 85
sleep 2
pat=$(dialog --stdout --title "Escolha o arquivo de backup para restaurar" --fselect / 10 65)
patd=$(dialog --stdout --title "Escolha o diretório para restauração do backup" --dselect / 10 65)
if [ -z "$pat" -o -z "$patd" ];then
dialog --title "Erro" --infobox "informação insuficiente, saindo do script..." 3 60
exit 1
elif [ ! -e $patd ];then
dialog --title "Erro" --infobox "Diretório "$patd" não existe, saindo do script..." 3 65
exit 1
fi
#########################################################
######## Restauração do arquivo #########
#########################################################
tar -zxvf $pat -C $patd 2> /dev/null |dialog --progressbox " Dados sendo restaurados: " 30 140
sleep 1
}
##################################################################################################################
##################################################################################################################
##### Restauração de um Backup Remoto ########
##################################################################################################################
##################################################################################################################
rest-rem()
{
dialog --title "Opção" --infobox 'Você escolheu a opção para restaurar um backup remoto' 3 65
sleep 2
##########################################################################################
######################## Entrada de dados para fazer backup ##############################
##########################################################################################
texto="Insira o endereço do host remoto que tem o backup, porta de acesso do ssh, O caminho completo do arquivo de backup e o nome do usuário que irá logar e salvar as alterações. NOTA: faça login com um usuário que tenha permissão de gravação no diretório do host remoto"
ent=$(dialog --stdout \
--ok-label "OK" \
--title "Dados de entrada" \
--form "$texto" 16 70 4 \
"IP do host" 1 1 "" 1 20 50 0 \
"Porta" 2 1 "22" 2 20 50 0 \
"Backup" 3 1 "" 3 20 50 0 \
"Usuário" 4 1 "$USER" 4 20 50 0)
IP=$(echo "$ent" |head -1)
PORT=$(echo "$ent" |head -2 |tail -1)
bkp=$(echo "$ent" |head -3 |tail -1)
usu=$(echo "$ent" |tail -1)
patd=$(dialog --stdout --title "Escolha para onde será restaurada a imagem de backup" --dselect / 10 70)
#####################################
### Verificando dados de entrada ####
#####################################
if [ -z "$ent" -o -z "$patd" ];then
dialog --infobox "Operação cancelada, saindo do script" 3 50
exit 1
elif [ -z "$IP" -o -z "$PORT" -o -z "$usu" ];then
dialog --infobox "informação insuficiente, saindo do script..." 3 55
exit 1
fi
#####################################################
# Verifica se os locais de origem e destino existem #
#####################################################
if [ -e "$patd" -a "$(echo "$(ssh -p "$PORT" "$usu"@"$IP" [ -e "$bkp" ] && echo "0" || echo "1")")" -eq "0" ];then
sleep 0.23
else
dialog --infobox "Local de origem ou destino não existe, saindo do script" 3 65
exit 1
fi
#########################################################
######## Restauração do arquivo #########
#########################################################
ssh -p "$PORT" "$usu"@"$IP" dd if="$bkp" |tar -zxvf - -C $patd |dialog --progressbox "Dados sendo restaurados:" 30 140
sleep 1
}
########################################################################################################
########################################################################################################
####################### Parando o script ################################
########################################################################################################
########################################################################################################
parar()
{
dialog --yesno " Deseja realmente parar o script ? isto pode fazer com que alguma tarefa em execução não seja concluida e ocasionar perda de dados. " 0 0
if [ "$?" = "0" ];then
pkill -term rsync 2> /dev/null
pkill -term tar 2> /dev/null
pkill -term backup.sh 2> /dev/null
echo " processos finalizados..."
else
dialog --infobox " script continua em execução..." 0 0
fi
}
case "$1" in
start)iniciar;;
stop)parar;;
*)echo "O Paramentro é invalido,use start,stop ou restart.";;
esac
Integrar/Sincronizar Firefox/Thunderbird com o KDE
Criador de árvore de compilação
freeradius: radwho mostrando número de usuários
Solução para bloquear totalmente o Facebook em sua rede
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)









