tar --exclude ne fonctionne pas comme je le souhaite !!

tar --exclude ne fonctionne pas comme je le souhaite !! - Shell/Batch - Programmation

Marsh Posté le 21-08-2006 à 19:52:47    

Salut tout le monde ;)
 
Voilà j'aimerai votre aide sur mon premier script de backup :

Code :
  1. #! /bin/bash
  2. # backup.sh
  3. ERREUR_ROOT=-1
  4. moi=`whoami`
  5. if [ "$moi" != "root" ]; then
  6. echo "Le backup ne peut etre fait que par le root et non par $moi"
  7. echo "Pensez à utilisez sudo ou a passer en root"
  8. exit $ERREUR_ROOT;
  9. fi
  10. #################################
  11. #Variables pouvant être modifiées
  12. #################################
  13. #Dossier de destination
  14. stockage="/media/usbdisk/save/`date +save-%d.%m.%Y.-%H.%M`"
  15. #Dossiers systeme à sauvegardés
  16. systeme="/etc /boot /usr/local"
  17. #dossier perso à sauvegardés
  18. perso="/home"
  19. #Dossiers à ne pas sauvegardés
  20. exclure="/home/chris/Tchgt/easyubuntu"
  21. #################################
  22. #Fin des variables à modifiées
  23. #################################
  24. #On verifie qu'il a y a des dossiers Perso  en sauvegarde
  25. #On crée le dossier de destination à la condition d'avoir des dossiers
  26. if [ -n "$perso" ] && mkdir -p "$stockage"
  27. then
  28. echo "Création du dossier de destination:" $stockage
  29. echo "Vous avez des dossiers perso à sauvegardés"
  30. #Puis on archive et on compresse cellui-ci dans le dossier
  31. echo "Archivage et Compréssion de /home en cours"
  32. echo "exclusion des dossiers : | .aMule | Download | Audio-Video | Partage | .Trash |"
  33. tar czvf "$stockage"/perso.tar.gz \
  34. --exclude /home/chris/.aMule \
  35. --exclude /home/chris/Download \
  36. --exclude /home/chris/Audio-Video \
  37. --exclude /home/chris/Partage \
  38. --exclude /home/chris/.Trash \
  39. $perso
  40. echo "Fin des opérations"
  41. fi
  42. if [ -n "$systeme" ] && mkdir -p "$stockage"
  43. then
  44. echo "Vous avez des dossiers système à sauvegardés"
  45. #Puis on archive et on compresse cellui-ci dans le dossier
  46. echo "Archivage et Compréssion de /boot /etc/ usr/local en cours"
  47. tar cvf - $systeme | gzip -9c > "$stockage"/systeme.tar.gz
  48. fi


J'aimerai votre avis sur l'option --exclude , je souhaiterai faire en premier une archive tar et ensuite la gzippé mais je n'y arrive pas quelqu'un paux m'aider à résoudre ce probleme qui en ai un pour moi ?
En fait je voudrai faire :

Code :
  1. tar czvf  $perso | gzip -9c > --exclude $exclure"$stockage"/perso.tar.gz

 
Mais je ne sais pas trops pourquoi ca ne fonctionne ps....
Merci de votre aide :)

Message cité 1 fois
Message édité par express__38 le 21-08-2006 à 19:53:20
Reply

Marsh Posté le 21-08-2006 à 19:52:47   

Reply

Marsh Posté le 23-08-2006 à 14:55:00    

Bon, déjà on va commencer par les petits trucs de ce script qu'il faudrait revoir
 

express__38 a écrit :

Code :
  1. moi=`whoami`
  2. if [ "$moi" != "root" ]; then ...



Essaye de regarder du coté de la commande "id" qui est plus rapide que "who am i"...
 

express__38 a écrit :

Code :
  1. if [ -n "$perso" ] && mkdir -p "$stockage"



Tu testes si une variable "perso" que tu as toi-même remplie n'est pas vide ??? Il y a peu de chance qu'elle le soit. Tu pourrais aussi tester si "1" = "1" de temps en temps histoire de ralentir un peu plus ton script...
Moi j'aurais écrit

Code :
  1. if test ! -d "$stockage"
  2. then
  3.   mkdir -p "$stockage"
  4.   ...


 

express__38 a écrit :

Code :
  1. tar czvf "$stockage"/perso.tar.gz \
  2. --exclude /home/chris/.aMule \
  3. --exclude /home/chris/Download \
  4. --exclude /home/chris/Audio-Video \
  5. --exclude /home/chris/Partage \
  6. --exclude /home/chris/.Trash \
  7. $perso



Tu pourrais mettre "/home/chris" dans une variable comme ça, si ça change un jour, tu n'as qu'une modif à faire. Mais à quoi sert la variable "exclure" définie un peu plus haut ???
 

express__38 a écrit :

je souhaiterai faire en premier une archive tar et ensuite la gzipper

Code :
  1. tar czvf  $perso | gzip -9c > --exclude $exclure"$stockage"/perso.tar.gz



Bon, déjà l'option "--exclude" est une option de "tar" donc il faut la mettre avec "tar" et non avec "gzip".
tar cvf archive.tar -exclude dossier_a_exclure liste_des_dossier_a_archiver
Ensuite, si tu veux renvoyer la sortie de "tar" sur une autre commande style "gzip", il faut penser au "tiret" qui indique à "tar" de créer l'archive sur la sortie standard. Puis on pipe cette sortie standard sur la commande "gzip"
=> tar cvf - liste_des_dossier_a_sauvegarder |gzip -9c >archive.tar.gz
Mais sous Linux, la commande "tar" contient déjà une option de compression "z" qui rend donc inutile le passage par "gzip" (surtout qu'en général, l'algo de compression est tel qu'une double compression augmente la taille du fichier final)
=> tar cvzf archive.tgz liste_des_dossier_a_sauvegarder


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed