#!/bin/sh # sauve, a backup script # Copyright (C) 2007 2009 2009 Mathieu SERPA # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # matser1973@free.fr trap 'x=$(mt -f /dev/st0 status);a=${x##*ONLINE};b=${x%$a};c=${b%ONLINE};oui=${b##$c};if [ "$oui" = "ONLINE" ];then mt -f /dev/st0 eject;fi' EXIT list(){ case "$1" in t) shift find "$@";; i) moment="$2" shift shift find "$@" -daystart -mtime "$moment";; esac } sauve_incr1(){ etendue=$(($1*7)) shift ( while [ $etendue -ge 0 ];do list i $etendue "$@" etendue=$(($etendue-1)) done )|cpio -ovBH crc>/dev/st0 } sauve_incr2(){ etendue=$1 shift ( while [ $etendue -ge 0 ];do list i $etendue "$@" etendue=$(($etendue-1)) done )|cpio -ovBH crc>/dev/st0 } sauve(){ mt -f /dev/st0 retension case $1 in t) shift list t "$@"|cpio -ovBH crc>/dev/st0;; s) etendue=$2 shift shift sauve_incr1 $etendue "$@";; j) etendue=$2 shift shift sauve_incr2 $etendue "$@";; esac mt -f /dev/st0 rewind } choix_menu(){ dialog --msgbox "$(date)" 0 0 choix=$(dialog --stdout --menu "Que voulez-vous faire?" 0 45 8 1 "sauvegarde totale" 2 "sauvegarde hebdomadaire" 3 "sauvegarde journalière" 4 "ajouter un répertoire" 5 "afficher la liste des répertoires" 6 "effacer la liste des répertoires" 7 Quitter) if [ $? = 1 ];then exit 1 fi case $choix in 1) dialog --yesno "sauvegarder les répertoires sélectionnés?" 0 0 if [ $? = 0 ]; then if [ "$liste_rep" != "" ]; then sauve t $liste_rep else dialog --msgbox "vous devez ajouter au moins un répertoire" 0 0 fi else return fi;; 2) if [ "$liste_rep" != "" ]; then etendue=$(dialog --stdout --radiolist "sauvegarder ce qui a changé depuis" 0 40 5 1 "une semaine" on 2 "deux semaines" off 3 "trois semaines" off 4 "quatre semaines" off) if [ $? = 0 ]; then sauve s $etendue $liste_rep else return fi else dialog --msgbox "vous devez ajouter au moins un répertoire" 0 0 fi;; 3) if [ "$liste_rep" != "" ]; then etendue=$(dialog --stdout --radiolist "sauvegarder ce qui a changé depuis" 0 35 7 1 "un jour" on 2 "deux jours" off 3 "trois jours" off 4 "quatre jours" off 5 "cinq jours" off 6 "six jours" off) if [ $? = 0 ]; then sauve j $etendue $liste_rep else return fi else dialog --msgbox "vous devez ajouter au moins un répertoire" 0 0 fi;; 4) while true do dialog --msgbox "liste des répertoires ajoutés:\n$liste_rep" 0 0 dialog --defaultno --yesno "voulez-vous ajouter un répertoire à la sauvegarde?" 0 0 if [ $? = 0 ]; then rep=$(dialog --stdout --dselect "" 0 0 0) tmp=$liste_rep liste_rep="${tmp} $rep" else return fi done;; 5) dialog --msgbox "liste des répertoires ajoutés:\n$liste_rep" 0 0;; 6) dialog --defaultno --yesno "supprimer la liste des répertoires?" 0 0 if [ $? = 0 ]; then liste_rep="" fi;; 7) exit 0;; esac } liste_rep="" sortie="" if [ "$(whoami)" = "root" ]; then until [ "$sortie" = "o" ] do choix_menu done else echo vous devez être root pour éxécuter ce script fi