Script de restauration

Fermé
xavyeii - 26 août 2008 à 10:14
 xavyeii - 27 août 2008 à 11:56
Bonjour,

Alors voilà, je suis débutant sous linux et je dois faire un script qui sauvegarde et archive des fichiers d'une machine dans une machine distante. Bon jusque là j'y arrive. Je dois aussi pouvoir restaurer ces archives. Il me semble que j'arrive à restaurer toutes les archives en même temps mais je voudrais faire l'action suivante:

- l'utilisateur entre le nom d'une archive .. Cette archive est ensuite lister et l'utilisateur entre le nom d'un ou plusieurs fichiers dans cette archive pour pouvoir le ou les restaurer;

Je vous met mon code ci-dessous:


******************************************************************************************


#!/et -x

#***********************************
# *
# PARAMETRES *
# *
#***********************************

#machine distante
MACH="toorist@10.220.168.138"

#liste des répertoires non archivés
LISTE=`ls -d /inst-*`

#liste des répertoires archivés
LISTE2=`ssh ${MACH} gzip -lr /tmp/svg`

#date du jour
JOUR=`date '+%Y%m%d'`

NOMINST= ${rep#/inst-}

#**********************************
# *
# MENU *
# *
#**********************************



echo -e "\n \n Sélectionner ce que vous désirez faire :"
echo "1: Lister les sauvegardes disponibles"
echo "2: Archiver et Sauvegarder"
echo "3: Effectuer une restauration"
echo -e "4: QUITTER \n"
echo -n "Saisissez 1, 2, 3 ou 4: "
read reponse
echo -e " \n "

#*********************************
# *
# CHOIX REPONSE *
# *
#*********************************


case $reponse in

1)
ls /inst-*/apache/
ls /inst-*/mysqld/ ;;

2)
for rep in $LISTE
do
echo "traitement de $rep"
if [ -d ${rep}/apache ]
then
tar cfz - ${rep}/apache | ssh ${MACH} "cat > /tmp/svg/apache/${rep}-apache-${JOUR}.tar.gz"
if [ $? -ne 0 ]
then
echo "**** Une erreur s'est produite lors de la sauvegarde d'apache ! ****"
fi
fi
if [ -d ${rep}/mysqld ]
then
tar cfz - ${rep}/mysqld | ssh ${MACH} "cat > /tmp/svg/mysqld/${rep}-mysqld-${JOUR}.tar.gz"
if [ $? -ne 0 ]
then
echo "**** Une erreur s'est produite lors de la sauvegarde de mysqld ! ****"
fi
fi
done ;;

3)

echo "${LISTE2}" |awk -F"-" '{print $2}' |sort -u
echo -e "\n1: Lister le contenu d'une archive pour n'en restaurer qu'un seul"
echo "2: Restaurer toutes les archives"
echo -ne "\nReponse : "
read reponse2

if [ $reponse2 -eq 1 ]
then
echo -n "Nom de l'archive : "
read choix
echo -e "\n"
for choix in $*
do
if -d $choix
then
tar -tvf ${MACH}:/tmp/svg/apache/inst-${choix}-apache-*.tar
tar -tvf ${MACH}:/tmp/svg/mysqld/inst-${choix}-mysqld-*.tar
else #non disponible
echo "$choix n'est pas disponible"
fi
done
elif [ $reponse2 -eq 2 ]
then
scp ${MACH}:/tmp/svg/apache${LISTE}-apache-*.tar.gz /tmp
tar -C / -xvzf /tmp${LISTE}-apache-*.tar.gz
scp ${MACH}:/tmp/svg/mysqld${LISTE}-mysqld-*.tar.gz /tmp
tar -C / -xvzf /tmp${LISTE}-mysqld-*.tar.gz
else
echo "**** Erreur ! ****"
fi ;;


******************************************************************************************




Merci de votre aide par avance ! =)

Xavier
A voir également:

4 réponses

linuxnico Messages postés 204 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 8 octobre 2010 10
26 août 2008 à 16:16
euh je comprends ce qu'est ton probleme, soit plus explicite, STP
0
En gros lorsque l'utilisateur tape :
3 puis 1 et qu'il rentre le nom de l'archive (listé juste avant), je voudrais que le contenu des archives correspondantes soient listées

Dans mon cas cela donne un truc du style:

*******************************************************************************************

Sélectionner ce que vous désirez faire :
1: Lister les sauvegardes disponibles
2: Archiver et sauvegarder
3: Effectuer une restauration
4: Quitter

Saisissez 1, 2, 3 ou 4: 3


havane
havane2

1: Lister le contenu d'une archive pour n'en restaurer qu'un seul
2: Restaurer toutes les archives

Réponse : 1
Nom de l'archive : havane (ou) havane2


*******************************************************************************************

Et à ce moment là, il ne se passe rien alors qu'il devrait me lister le contenu de:

- ssh ${MACH}:/tmp/svg/apache/inst-havane (ou) havane2-apache-*.tar
- ssh ${MACH}:/tmp/svg/mysqld/inst-havane (ou) havane2-mysqld-*.tar

Et que par la suite l'utilisateur sélectionne 1 ou plusieurs fichiers de l'archive pour le/les restaurer..

(Une mauvaise manip' de TAR sûrement..)

Voilà j'espère que j'ai été un peu plus clair.. Désolé je débute ^^
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 août 2008 à 18:40
Salut,

C'est normal qu'il ne se passe rien, tu demandes un choix à faire "Nom de l'archive :" que tu récupères dans la variable "$choix", puis tu veux faire une boucle sur je ne sais quoi "$*" ? Des paramètres apparemment, mais quels paramètres ? et pourquoi une boucle ?
Une fois que le chois est fait, tu vérifies si c'est un répertoire (là encore je ne sais pas sur quoi tu te bases ???), et tu enchaînes les commandes avec "tar" ...

if [ $reponse2 -eq 1 ]
then
echo -n "Nom de l'archive : "
read choix
echo -e "\n"

if [ [ -d $choix ]]
then

tar -tvf ${MACH}:/tmp/svg/apache/inst-${choix}-apache-*.tar
tar -tvf ${MACH}:/tmp/svg/mysqld/inst-${choix}-mysqld-*.tar
else #non disponible
echo "$choix n'est pas disponible"
fi 
...

 
Non ?
0
Si je fais cela il me met un message d'erreur quand je tape 3 dans le menu principal.
Il me met l'erreur suivante:

./move.sh: line 93: syntax error near unexpected token 'else'
./move.sh: line 93: ' else'
0