200 lines
5.5 KiB
Bash
Executable File
200 lines
5.5 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
# tests de base
|
|
which zenity
|
|
if [ "$?" != "0" ]; then
|
|
echo "Zenity n'est pas installé.";exit
|
|
exit
|
|
fi
|
|
|
|
which borg
|
|
if [ "$?" != "0" ]; then
|
|
echo "borgbackup n'est pas installé.";exit
|
|
exit
|
|
fi
|
|
|
|
# META VARIABLES
|
|
#################################################################################
|
|
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
|
|
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
|
|
dossierprofil="$HOME/.config/borg/"
|
|
W="--width=600"
|
|
H="--height=500"
|
|
iconborg="--window-icon=$HOME/.icons/borg.svg"
|
|
|
|
# FONCTIONS
|
|
#################################################################################
|
|
TestBorgRepo () {
|
|
if [ ! -f "config" ]; then
|
|
TestBorgErr=1
|
|
infoerr=$(echo "Impossible de trouver le fichier de configuration borg.")
|
|
zenity $W --error --text="$infoerr"
|
|
exit
|
|
fi
|
|
|
|
if [ ! -d "data" ]; then
|
|
TestBorgErr=1
|
|
infoerr=$(echo "Impossible de trouver le fichier de configuration borg.")
|
|
zenity $W --error --text="$infoerr"
|
|
exit
|
|
fi
|
|
|
|
if [ -d "lock.exclusive" ]; then
|
|
TestBorgErr=1
|
|
infoerr=$(echo "Le dépôt est bloqué, une opération est peut-être en cours")
|
|
zenity $W --error --text="$infoerr"
|
|
exit
|
|
fi
|
|
}
|
|
|
|
bobainfoa () {
|
|
TestBorgRepo
|
|
borg info ./::$borg_repo
|
|
}
|
|
|
|
DossierPresent () {
|
|
if [ ! -d "$1" ]; then
|
|
inforerror=$(echo "Erreur, le dossier $1 est absent.")
|
|
zenity $W --error --text="$inforerror"
|
|
VarDossierPresent="false"
|
|
fi
|
|
}
|
|
|
|
ZenityPulsate () {
|
|
zenity $W $iconborg --progress --pulsate --auto-close
|
|
}
|
|
|
|
BorgFilter () {
|
|
if [ "$filter" = "" ];then
|
|
borg_archive=$(borg list --short $borg_repo | zenity $H $iconborg --list --title "Listes des archives" --column "Archive")
|
|
else
|
|
borg_archive=$(borg list --short $borg_repo| grep $filter | zenity $H $iconborg --list --title "Listes des archives" --column "Archive")
|
|
fi
|
|
}
|
|
|
|
# Profils et tests
|
|
#################################################################################
|
|
# si $1 n'est pas vide fichier de profil = $1
|
|
# sinon afficher les profils disponibles
|
|
if [ ! $1 = "" ]; then
|
|
fichierprofil="$1"
|
|
. "$1"
|
|
else
|
|
cd $dossierprofil
|
|
fichierprofil=$(ls -1 *.conf | cut -d. -f1 | \
|
|
zenity $W $H $iconborg --list \
|
|
--title "Liste des profils" \
|
|
--text "Choisir un profil dans la liste" \
|
|
--column "Fichier de profil"\
|
|
) && . "$dossierprofil"/"$fichierprofil".conf
|
|
fi
|
|
|
|
if [ "$fichierprofil" = "" ]; then
|
|
infoerr=$(echo "Aucun profil choisi.")
|
|
zenity $W --error --text="$infoerr"
|
|
exit
|
|
elif [ "$nomsauvegarde" = "" ]; then
|
|
infoerr=$(echo "Nom de sauvegarde non défini.")
|
|
zenity $W --error --text="$infoerr"
|
|
exit
|
|
elif [ "$borg_repo" = "" ]; then
|
|
infoerr=$(echo "Variable \$borg_repo absente")
|
|
zenity $W --error --text="$infoerr"
|
|
exit
|
|
fi
|
|
|
|
cd $borg_repo
|
|
TestBorgRepo
|
|
|
|
#################################################################################
|
|
# MENU PRINCIPAL Gestion des options du menu
|
|
#################################################################################
|
|
|
|
while [ ! "$choixmenu" = "qu" ];do
|
|
choixmenu=$(echo -e "\
|
|
cs\nCréer une archive\n\
|
|
ms\nMonter une archive\n\
|
|
dm\nDemonter une archive\n\
|
|
ss\nSupprimmer une archive\n\
|
|
is\nInformation archive\n\
|
|
fi\nFiltre : "$filter"\n\
|
|
--\n------------------------------------------\n\
|
|
id\nInformation sur le dépôt\n\
|
|
ap\nAfficher le profil\n\
|
|
--\n------------------------------------------\n\
|
|
ed\nEspace disque utilisé : $(df -k --output=pcent $borg_repo | tail -n +2)\n\
|
|
qu\nQUITTER\
|
|
" | zenity $iconborg --list $H $W --title "BORG GUI : $nomsauvegarde" \
|
|
--hide-header --hide-column=1 --column "id" --column "choix")
|
|
|
|
if [ "$choixmenu" = "" ];then
|
|
echo ""
|
|
|
|
elif [ "$choixmenu" = "cs" ];then
|
|
# Créer une archive
|
|
|
|
TestBorgRepo
|
|
|
|
DossierPresent $borg_repo
|
|
DossierPresent $borg_dir
|
|
|
|
if [ "$VarDossierPresent" != "false" ];then
|
|
borg create $borg_excludes $borg_compress $borg_repo::$borg_archive $borg_dir | ZenityPulsate
|
|
sync | ZenityPulsate
|
|
zenity --notification --text "Sauvegarde $nomsauvegarde terminée"
|
|
zenity $W --info --text "Sauvegarde $nomsauvegarde terminée"
|
|
fi
|
|
|
|
elif [ "$choixmenu" = "ms" ];then
|
|
# Monter une archive
|
|
BorgFilter
|
|
if [ ! "$borg_archive" = "" ];then
|
|
mkdir $HOME/$borg_archive
|
|
borg mount $borg_repo::$borg_archive $HOME/$borg_archive | ZenityPulsate
|
|
zenity $W --info --text="La sauvegarde est disponible dans le dossier\n<tt>$HOME/$borg_archive</tt>"
|
|
fi
|
|
|
|
elif [ "$choixmenu" = "dm" ];then
|
|
# Demonter une archive
|
|
ptnmontage=$(mount | grep borgfs | cut -d" " -f3 | zenity $W $H $iconborg --list --title "Liste des points de montages" --column "Archive")
|
|
if [ ! "$ptnmontage" = "" ];then
|
|
fusermount -u $ptnmontage | ZenityPulsate
|
|
sleep 2 | ZenityPulsate
|
|
rmdir $ptnmontage | ZenityPulsate
|
|
fi
|
|
|
|
elif [ "$choixmenu" = "ss" ];then
|
|
# Supprimmer une archive
|
|
BorgFilter
|
|
if [ "$borg_archive" = "" ];then
|
|
zenity $W --info --text "Aucune archive choisie, retour au menu"
|
|
else
|
|
borg delete $borg_repo::$borg_archive | ZenityPulsate
|
|
zenity $W --info --text="Suppresion de l'archive $borg_archive terminée"
|
|
fi
|
|
|
|
|
|
elif [ "$choixmenu" = "is" ];then
|
|
# Information archive
|
|
BorgFilter
|
|
if [ "$borg_archive" = "" ];then
|
|
zenity $W --info --text "Aucune archive choisie, retour au menu"
|
|
else
|
|
zenity $W --info --text="<tt>$(borg info $borg_repo::$borg_archive)</tt>" | ZenityPulsate
|
|
fi
|
|
|
|
elif [ "$choixmenu" = "fi" ];then
|
|
#Filtre
|
|
filter=$(zenity --entry)
|
|
|
|
elif [ "$choixmenu" = "id" ];then
|
|
# Information sur le dépôt
|
|
zenity $W --info --text="<tt>$(borg info $borg_repo)</tt>" | ZenityPulsate
|
|
|
|
elif [ "$choixmenu" = "ap" ];then
|
|
# Afficher le profil
|
|
zenity $W $H --info --text="<tt>$(cd $dossierprofil && cat "$fichierprofil".conf)</tt>"
|
|
|
|
fi
|
|
done
|