UFFICIALE L'OT di Linux e altri OS

Pubblicità
@alex87alex @« MoMy » aggiunto file di log e eliminato un paio di bug (cartelle con spazi non venivano gestite..:fumato:)
Codice:
#!/bin/bash

testo="*************************************************************************
INFORMATIVA ALL’UTENTE.
*************************************************************************
BACKUP v3.0 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 incrementale raccoglie 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 pro-
venienza, 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 e-
strarre 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."

## controllo dipendenze
if [ ! -e "/usr/bin/pv" ] || [ ! -e "/usr/bin/zenity" ] ; then
 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="Errore: dipendenze non soddisfatte, installa $dip. Applicazione terminata." ; if [ $? -eq 1 ] ; then gnome-terminal --geometry=35x6 --hide-menubar --title="ERRORE dipndenze" -e 'bash -c "echo "" ; echo --------------------------;echo installa: '$dip'; echo --------------------------; echo app terminata, premi invio..; read"' ; fi
 exit 0
fi

## mostra testo iniziale?
if [ $(sed -e '$!d' $0) = "#info=on" ] ; then
 info=$(zenity --list --width=450 --height=600 --title="GESTIONE BACKUP INCREMENTALI" --text="$testo" --radiolist --column="clicca" --column="opzione" TRUE "Mostra ancora all'avvio" FALSE "Non mostrare più all'avvio")
 case $info in
  "Non mostrare più all'avvio" )
   sed -i '$ d' $0
   echo "#info=off" >> $0
   ;;
  "" )
   zenity --notification --text="gestione backup terminata, ciao."
   exit 0
   ;;
 esac
fi

## menù iniziale
var="mostra info al prossimo riavvio"
while [ "$var" = "mostra info al prossimo riavvio" ]
do
if [ $(sed -e '$!d' $0) = "#info=on" ] ; then
 var=$(zenity --list --width=500 --height=330 --title="GESTIONE BACKUP/RIPRISTINO" --text="Seleziona l'opzione desiderata" --radiolist --column="clicca" --column="opzione" TRUE "script di BACKUP" FALSE "script di RIPRISTINO" FALSE "GESTIONE FILES" FALSE "mostra file di log")
else
 var=$(zenity --width=500 --height=330 --list --title="GESTIONE BACKUP/RIPRISTINO" --text="Seleziona l'opzione desiderata" --radiolist --column="clicca" --column="opzione" TRUE "script di BACKUP" FALSE "script di RIPRISTINO" FALSE "GESTIONE FILES" FALSE "mostra file di log" FALSE "mostra info al prossimo riavvio")
fi
if [ "$var" = "mostra info al prossimo riavvio" ] ; then sed -i '$ d' $0 ; echo "#info=on" >> $0 ; fi
done

## scelte dal menù iniziale
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 $(find "$dest" -maxdepth 1 -name *.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
       logfile="logfile_backup_"$cartella"-"$(date +%d-%m-%Y) ; echo -e "Creazione archivio "$backupfile" in data "$(date +%d-%m-%Y)":\n\n" > "$dest"/"$logfile"
       (tar c --listed-incremental="$dest"/"$log" -f - "$prov" | pv -n -s $(du -sb "$prov" | awk '{print$1}') | gzip > "$dest"/"$backupfile") 2>&1 | tee "$dest"/"$logfile" | zenity --progress --no-cancel --width=450 --height=120 --title="BACKUP $cartella" --text="backup in esecuzione, attendere.."
       zenity --notification --window-icon="info" --text="backup eseguito con successo." ; echo -e "\n\n**fine backup.**" >> "$dest"/"$logfile"
      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
  ;;
 "script di RIPRISTINO" )
  prov=$(zenity --file-selection --directory --title="Seleziona la cartella dell'archivio" 2> /dev/null)
  case $? in
   0 )
    if [ "$(find "$prov" -maxdepth 1 -name *.tar.gz)" = "" ] ; then zenity --notification --window-icon="error" --text="nessun archivio presente nella cartella."
   else
     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=$(find "$prov" -maxdepth 1 -name *.tar.gz | grep _backup0) ; archivio=${vararch%%_*}"_backup.tar.gz" ; archivio=${archivio##*/}
       val=$(du -sh "$prov" | awk '{print$1}')
       testo="
cartella dove ripristinare:
$dest

cartella dell'archivio:
$prov

archivio da ripristinare:
$archivio
$val byte"
       zenity --question --height=400 --title="BACKUP INCREMENTALE" --text="$testo"
       if [ $? -eq 0 ] ; then
        count=0 ; for i in $(find "$prov" -maxdepth 1 -name *.tar.gz) ; do a=$(du -sb "$i" | awk '{print$1}') ; let count=count+a ; done
        logfile="logfile_ripristino_"$archivio"-"$(date +%d-%m-%Y) ; echo -e "Ripristino archivio "$archivio" in data "$(date +%d-%m-%Y)":\n\n" > "$dest"/"$logfile"
        for file in "$(find "$prov" -maxdepth 1 -name *.tar.gz)"
        do
         echo "archivio: "$file >> "$dest"/"$logfile"
         cd "$prov"
         (tar xz --listed-incremental=/dev/null --file ${file##*/} -C "$dest" | pv -n -s $count) 2>&1 | tee "$dest"/"$logfile" | zenity --progress --no-cancel --width=450 --height=120 --title="RIPRISTINO $archivio" --text="ripristino dell'archivio $file in esecuzione, attendere.."
        done
        zenity --notification --window-icon="info" --text="ripristino eseguito con successo." ; echo -e "\n\n**fine ripristino.**" >> "$dest"/"$logfile"
       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
    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 file di log" )
  showfile=$(zenity --file-selection --title="Seleziona il file da mostrare" 2> /dev/null)
  if [[ $? -eq 0 ]]; then
   zenity --text-info --width=1500 --height=800 --title=${showfile##*/} --filename=$showfile
  else
   zenity --notification --text="gestione backup terminata, ciao."
  fi
  ;;
esac


exit 0

#info=off
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top