Forum Linux.redhat script de backup

Posté par  .
Étiquettes : aucune
0
11
avr.
2007
Salut les amis, voila je veux faire un script de backup.
Je dois lui donner deux arguments
1. le nom d'un fichier qui contient des repertoires à sauvegarder
2. le nombre de jours de dernière modification des fichiers
Si on donne ce 2 e argument, on fait 1 backup des fichiers modifiés depuis ce nombre de jours sinon backup complet.
voila ce que j'ai fait mais ça ne fonctionne pas.

#!/bin/bash

while read line
do
echo -e "line\n"
done < $1 | find $1 -mtime -$2 | tar -c-T-f /home/backup.tar
# find pour rechercher dans le fichier passé en 1er argument
# -mtime -$2 pour spécifier les fichiers modifiés depuis le
# nombre de jour passés en 2ème argument
# on passe à pipe
# tar -c-T-f pour créer l'archive
# -c pour la céer
# l'option -T pour obtenir le nom des fichiers à archiver
# l'option -f pour le fichier backup.tar

Il y a plein d'erreurs je sais....si quelqu'un a la solution je lui en saurai gré. Merci
(je travaille sous FC6)
  • # Pas à Pas :-)

    Posté par  . Évalué à 1.

    Bonjour,

    Je ne pourrais pas forcément te donner une solution à ton problème mais voici quelques points d'attention:

    1) Bloc n°1

    while read line
    do
    echo -e "line\n"
    done < $1

    => Ce bout de code (avec une coquille dans le echo où il faudrait un $line afin d'afficher le contenu de la variable line) ressemble fortement à la commande "cat $1" :-)

    2) Bloc n°2


    ... | find $1 -mtime -$2 | ...

    => Pas trop compris. A moins que tu ne souhaites effectuer un find pour chaque ligne du fichier $1 ?!?
    A ce moment là, la boucle while qui précède peut être utilisée en remplaçant la ligne "echo ..." par "find $line -mtime $2"
    Voici un code de remplacement pour les bloc 1&2:

    while read line
    do
    find "$line" -mtime "$2"
    done < $1


    3) Bloc n°3

    ... | tar -c-T-f /home/backup.tar

    => Il ne manquerait pas un '-' pour l'option '-T' (aka '--files-from=' parce que je préfère la version longue :P) afin de lire sur l'entrée standard la liste des fichiers à prendre en compte ?
    Autrement dit, on aurait "tar -c -T - -f ...".

    En parcourant la page info du tar GNU, j'ai trouvé un chapitre "Performing Backups and Restoring Files" [http://sunsite.ualberta.ca/Documentation/Gnu/tar-1.13/html_c(...)]
    Peux-être une piste à envisager pour tes backups ?

    Enfin, pour les scripts en BASH (je précise car tous les shells ne sont pas forcément compatibles), il y a le "Advanced Bash-Scripting Guide" [http://tldp.org/LDP/abs/html/] à garder sous le coude ^__^

    Bon courage !

    Cdlt,
    • [^] # Re: Pas à Pas :-)

      Posté par  . Évalué à 2.

      rien à redire sur le premier point

      mais pour le tar


      => Il ne manquerait pas un '-' pour l'option '-T' (aka '--files-from=' parce que je préfère la version longue :P) afin de lire sur l'entrée standard la liste des fichiers à prendre en compte ?
      Autrement dit, on aurait "tar -c -T - -f ..."


      je verrais plutot :

      tar -cf /home/backup.tar -

      car l'option
      -T, --files-from F
      get names to extract or archive from file F

      precise à tar de prendre les fichiers à archiver dans le fichier F
      dans notre cas c'est find qui renvoie les fichiers à archiver
      et comme il va envoyer les fichiers 1 par 1 je mettrais l'option
      -r
      à tar

      ou alors je stocke tous les fichiers trouver par find dans un fichier temporaire, que j'irais alors lire avec le -T

      enfin l'option -z pour compresser le tout.

      ca donnerait donc
      soit find $1 -mtime $2 | tar crzf /home/backup.tar.gz -
      soit en deux temps
      find $1 -mtime $2 >/tmp/fichier_temporaire
      tar crzf /home/backup.tar.gz -T /tmp/fichier_temporaire
      • [^] # Re: Pas à Pas :-)

        Posté par  . Évalué à 1.

        Hello,

        Perso, je vote pour le fichier temporaire :-)

        Merci pour l'astuce "option '-r' (aka --append) couplée avec le '-' à la fin" ^__^ ! Je la testerais sûrement bientôt, me connaissant.

        La proposition que j'avais faite, était basée sur l'hypothèse que le fichier /home/backup.tar était écrasé/remplacé (s'il existait) à chaque exécution du script.
        Ainsi (sous réserves d'avoir des entrées correctes et valides):

        while read line; do
        find "${line}" -mtime -${2}
        done < ${1} | tar -c -T - -f /home/backup.tar

        crée un fichier tar "/home/backup.tar" contenant uniquement les fichiers/dossiers listés par la boucle while.
        Au passage, en rajoutant l'option "\! -type d" avant l'option "-mtime" à la commande find, nous n'aurons pas et les répertoires et les fichiers des répertoires.
        Autrement dit, éviter de générer une liste du type: /chemin et /chemin/fichier (voir /chemin/sous-chemin/fichier), car je ne sais pas comment la commande tar GNU gère cela.
        etc... (utiliser une valeur par défaut pour $2 comme ${2:-999999}, ...)

        @+

        PS: Pour info, je travaille plutôt sous OpenBSD (non, je ne troll pas ^__^) et les commandes ne sont pas forcément semblables en fonctionnalités :/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.