#!/bin/bash
testo="*************************************************************************
INFORMATIVA ALL’UTENTE.
*************************************************************************
Free license software by rebellion and thanks to «MoMy»
*************************************************************************
ATTENZIONE dipendenze da installare:
- pv
- zenity
*************************************************************************
Script di gestione backup incrementali e loro ripristino. Il backup incrementaleraccoglie in
una cartella (di destinazione)il primo backup completo di una cartella (di provenienza); in
seguito vengono creati ulteriori archivi con le sole modifiche apportate alla cartella di
provenienza, il tutto gestito da un file .idx presente nella cartella dell’archivio.
Se però si desidera compiere un backup di una cartella non incrementale basterà, dopo aver
creato per la prima volta l’archivio, eliminare il file .idx mediante l’opzione di 'gestione
files' di questo script; fate attenzione a non cancellare il file .idx quando sono presenti
più di un backup incrementali altrimenti non sarà più possibile ripristinare il backup a meno
di non estrarre il file ‘cartella’_backup0-gg-mm-aa.tar.gz relativo alla data gg-mm-aa.
Per estrarre un backup completo basta cliccare sul file .tar.gz col tasto sn o dx a seconda
della distribuzione/DE in uso. Tutti gli archivi creati sono compressi con gzip."
if [ $(sed -e '$!d' /home/$USER/backup) = "#info=on" ] ; then
test=$(zenity --list --width=450 --height=600 --title="GESTIONE BACKUP INCREMENTALI" --text="$testo" --radiolist --column="clicca" --column="opzione" TRUE "Non mostrare più all'avvio" FALSE "Mostra ancora all'avvio")
case $test in
"Non mostrare più all'avvio" )
sed -i '$ d' /home/$USER/backup
echo "#info=off" >> /home/$USER/backup
;;
esac
fi
[ -e "/usr/bin/pv" ] && [ -e "/usr/bin/zenity" ]
case $? in
1 )
if [ ! -e "/usr/bin/pv" ] ; then dip="pv" ; fi
if [ ! -e "/usr/bin/zenity" ] ; then [ -e "/usr/bin/pv" ] && dip="zenity" || dip=$dip" e zenity" ; fi
zenity --error --width=500 --height=100 --text="dipendenze non soddisfatte: installa $dip."
zenity --notification --text="gestione backup terminata, ciao."
;;
0 )
if [ $(sed -e '$!d' /home/$USER/backup) = "#info=on" ] ; then var=$(zenity --width=450 --height=300 --list --title="GESTIONE BACKUP/RIPRISTINO" --text="Seleziona l'opzione desiderata" --column="" "script di BACKUP" "script di RIPRISTINO" "GESTIONE FILES")
else var=$(zenity --width=450 --height=300 --list --title="GESTIONE BACKUP/RIPRISTINO" --text="Seleziona l'opzione desiderata" --column="" "script di BACKUP" "script di RIPRISTINO" "GESTIONE FILES" "MOSTRA INFO AL PROSSIMO RIAVVIO")
fi
case $var in
"script di BACKUP" )
dest=$(zenity --file-selection --directory --title="Seleziona la cartella di backup" 2> /dev/null)
case $? in
0 )
prov=$(zenity --file-selection --directory --title="Seleziona la cartella da copiare" 2> /dev/null)
if [[ $? -eq 0 ]]; then
[ $(du -s $prov | awk '{print $1}') -gt $(df $dest | tr "\n" ' ' | awk '{print $12}') ]
if [[ $? -eq 1 ]]; then
cartella=${prov##*/}
count=0
for i in $(ls $dest/*.tar.gz) ; do let count=count+1 ; done
backupfile=$cartella"_backup"$count"-"$(date +%d-%m-%Y).tar.gz
testo="cartella di destinazione:
$dest
cartella di provenienza:
$prov
file di backup:
$backupfile"
zenity --question --title="BACKUP INCREMENTALE" --text="$testo"
if [ $? -eq 0 ]; then
log="backup_"$cartella.idx
if [ -e $dest/$backupfile ]; then
zenity --notification --window-icon="info" --text="c'è già un backup, non più di un backup al giorno"
else
(tar c --listed-incremental=$dest/$log f - $prov | pv -n -s $(du -sb $prov | awk '{print$1}') | gzip > $dest/$backupfile.tar.gz) 2>&1 | zenity --progress --no-cancel --width=450 --height=120 --title="AVVIO BACKUP" --text="backup in esecuzione, attendere.."
# tar zcvf $dest/$backupfile --listed-incremental=$dest/$log $prov/ | zenity --progress --percentage=0 --auto-close
zenity --notification --window-icon="info" --text="backup eseguito con successo."
fi
else
zenity --notification --text="gestione backup terminata, ciao."
fi
else
zenity --notification --window-icon="error" --text="backup non eseguito: spazio su disco non sufficiente."
fi
else
zenity --notification --text="gestione backup terminata, ciao."
fi
;;
1 )
zenity --notification --text="gestione backup terminata, ciao."
;;
esac
[ "$(ls -A $dest)" ] && echo "" || rm -r $dest
;;
"script di RIPRISTINO" )
prov=$(zenity --file-selection --directory --title="Seleziona la cartella dell'archivio" 2> /dev/null)
case $? in
0 )
if `ls $prov/*.tar.gz &> /dev/null`; then
dest=$(zenity --file-selection --directory --title="Seleziona la cartella dove ripristinare" 2> /dev/null)
if [[ $? -eq 0 ]]; then
[ $(du -s $prov | awk '{print $1}') -gt $(df $dest | tr "\n" ' ' | awk '{print $12}') ]
if [[ $? -eq 1 ]]; then
vararch=$(ls *.tar.gz | grep _backup0) ; archivio=${vararch%%_*}"_backup.tar.gz"
val=$(du -sh $prov | awk '{print$1}')
testo="
cartella dove ripristinare:
$dest
cartella ddell'archivio:
$prov
archivio da ripristinare:
$archivio
$val byte"
zenity --question --height=400 --title="BACKUP INCREMENTALE" --text="$testo"
if [ $? -eq 0 ] ; then
for file in $( ls $prov/*.tar.gz )
do
cd $prov
(pv pv -n -s $(du -sb $prov/*.tar.gz | awk '{print$1}') | tar xzv --listed-incremental=/dev/null --file ${file##*/} -C $dest) 2>&1 | zenity --progress --no-cancel --width=450 --height=120 --title="AVVIO RIPRISTINO IN CORSO" --text="ripristino dell'archivio $archivio in esecuzione, attendere.."
done
zenity --notification --window-icon="info" --text="ripristino eseguito con successo."
else
zenity --notification --text="gestione backup terminata, ciao."
fi
else
zenity --notification --window-icon="error" --text="ripristino non eseguito: spazio su disco non sufficiente."
fi
else
zenity --notification --text="gestione backup terminata, ciao."
fi
else
zenity --notification --window-icon="error" --text="nessun archivio presente nella cartella."
fi
;;
"" )
zenity --notification --text="gestione backup terminata, ciao."
;;
esac
;;
"" )
zenity --notification --text="gestione backup terminata, ciao."
;;
"GESTIONE FILES" )
file=$(zenity --file-selection --title="Seleziona il file da elimnare" 2> /dev/null)
if [[ $? -eq 0 ]]; then
[ zenity --question --height=400 --title="BACKUP INCREMENTALE" --text="eliminare $file?" ] && echo "" || (rm $file && zenity --notification --text="file '${file##*/}' eliminato.")
else
zenity --notification --text="gestione backup terminata, ciao."
fi
;;
"MOSTRA INFO AL PROSSIMO RIAVVIO" )
sed -i '$ d' /home/$USER/backup
echo "#info=on" >> /home/$USER/backup
;;
esac
;;
esac
exit 0
#info=on