ctw6av
(usa Nenhuma)
Enviado em 15/06/2016 - 15:01h
Olha este aqui e veja se te ajuda, se sim dê permissão e execute assim:
./backup.sh /midia/de/backup /diretório/a/salvar
se acaso a mídia ou disco rígido estiver desmontado ele monta faz o backup recursivamente, empacota e compacta.
#!/bin/bash
YELLOW="\033[1;33m"
RESCOLOR="\e[0m"
DEVICE="$1"
ORIGIN="$2"
# Animação
function Anime()
{
i=1
while [[ ! -z $(ps | grep -w $! 2>/dev/null) ]]; do
printf "$INFO [..........] $RESCOLOR" | sed "s/\./\#/$i"
printf '\b%.0s' {1..150}
sleep 0.10
if [ "$i" -gt 9 ]; then
i=1
else
((i++))
fi
done
printf "$INFO [..........]"$YELLOW" Pronto! "$RESCOLOR" \n" | sed 's/\./\#/g'
}
# checagem de itens necessários
function ChekList()
{
INFO="Checando dependências"
local LISTA=("rsync" "tar" "bzip2")
for (( i=0; i < ${#LISTA[*]} ; i++ )); do
if [ -z $(which "${LISTA[$i]}") ]; then
printf "${LISTA[$i]} "$YELLOW"Não instalado"$RESCOLOR"\n"
exit 1;
fi
sleep 1
done & Anime
}
# Cheacgem e montagem do dispositivo
function CheckMount()
{
if fdisk -l | grep $DEVICE &>/dev/null; then
if ! mount | grep $DEVICE &>/dev/null; then
if [ -d /mnt ]; then
INFO="Montando $DEVICE"
mount "$DEVICE" /mnt & Anime
else
INFO="Criando diretório /mnt"
mkdir /mnt & Anime
INFO="Montando $DEVICE"
mount "$DEVICE" /mnt & Anime
fi
else
case $(df -h | grep $DEVICE | awk '{print $NF}') in
/mnt) printf "$DEVICE já está montado em "$YELLOW"$(df -h | grep $DEVICE | awk '{print $NF}') $RESCOLOR\n";;
*) INFO="Desmontando $DEVICE"
umount "$DEVICE" &>/dev/null & Anime
INFO="Montando $DEVICE em /mnt"
mount "$DEVICE" /mnt & Anime;;
esac
fi
else
printf "$DEVICE: não encontrado\n"
exit 127;
fi
}
# Função para deletar residuos apos o backup e compactação.
function Delete()
{
while read LINE; do
if [ $LINE != "BKP*" ]; then
rm -rf /mnt/"$LINE" &>/dev/null
fi
done < /tmp/backup.txt
rm /tmp/backup.txt &>/dev/null
umount $DEVICE &>/dev/null
}
# Função para realizar o backup
function Backup()
{
if [ ! -e "$ORIGIN" ]; then
printf "\nErro: 127 arquivo ou diretório não encontrado\n\n"
exit 127;
else
ChekList
CheckMount
INFO="Realizando backup"
rsync -aAX --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*"} "$ORIGIN" /mnt/ &>/dev/null & Anime
ls -a /mnt > /tmp/backup.txt
INFO="Empacotando"
tar -cf /mnt/BKP_$(date +%d-%h-%Y_%X).tar /mnt/ &>/dev/null & Anime
INFO="Comprimindo backup"
bzip2 -z --best /mnt/*.tar &>/dev/null & Anime
if [ $? == 0 ]; then
INFO="Limpando residuos"
Delete & Anime
exit 0;
fi
fi
}
if [ -f "$ORIGIN" ]; then
Backup
else
if echo $ORIGIN | egrep '/$' &>/dev/null; then
Backup
else
ORIGIN=$ORIGIN/
Backup
fi
fi
=====================================================================
Não existe saber mais ou saber menos, existem saberes diferentes.
=====================================================================