Forum Programmation.perl Script de backup d'un répertoire

Posté par  .
Étiquettes : aucune
0
3
juil.
2007
Bonjour,

Je recherche un script Perl qui fasse une copie récursive (donc avec tous les sous-répertoires, et fichiers des sous-répertoires) d'un répertoire.

Idéalement, le répertoire copié pourrait-être compressé.

Je me doute que ça ne serait pas compliqué à coder, mais je n'ai pas beaucoup de temps et je n'ai donc pas envie de réinventer la roue.

Merci d'avance.
  • # re

    Posté par  (site web personnel) . Évalué à 3.

    cp -R /repertoire/ ?

    tar cvzf backup.tar.gz /repertoire ?
  • # au hasard...

    Posté par  . Évalué à 1.

    exec() ou system()

    en lui passant
    tar zcv ton_archive.tgz ton_dossier
    • [^] # Re: au hasard...

      Posté par  . Évalué à 1.

      Oui, oui, j'avais bien pensé à ça ;-)

      Mais mon objectif est de mettre ça dans un cron, et du coup, j'aimerais bien que l'archive soit automatiquement suffixée de la date (genre YYYYMMDD-HHMMDDSS) ou un timestamp pour ne pas écraser les sauvegardes précédentes.
      • [^] # Re: au hasard...

        Posté par  . Évalué à 2.

        ecnore plus simple

        si c'est pour mettre dans un cron un simple script shell suffira


        #!/bin/bash

        #date à calculer avec les bons parametres
        DATE=`date`

        cp -R /dossier_source /dossier_destination

        tar zcvf $DATE.mon_archive.tgz /dossier_a_compresser


        puis appeler ce fichier à partir du cron

        man date pour avoir le detail de comment avoir la date au format YYYYMMDD :-)
        • [^] # Re: au hasard...

          Posté par  . Évalué à 1.

          Je voulais faire ça en Perl, mais finalement en bash c'est pas mal ;-)

          Pour mémoire (ou si quelqu'un passe par ici et ne veut pas s'embêter à lire le man), l'option à passer à date pour avoir le format YYYYMMDD-HHMISS est:
          date +%Y%m%d-%H%M%S
          => 20070703-170801
          • [^] # Re: au hasard...

            Posté par  . Évalué à 1.

            d'apres ce que j'ai lu ce serait ca en effet
          • [^] # Re: au hasard...

            Posté par  (site web personnel) . Évalué à 4.

            >Je voulais faire ça en Perl, mais finalement en bash c'est pas mal ;-)

            Perl pour faire ce genre de chose c'est comme prendre une massue pour casser une noisette ...
            D'autant plus qu'il n'est pas conçu pour ça donc au final tu ferait un perl qui appelle un shell.

            Sinon y a pas non plus besoin de créer un script shell, cron execute les lignes via le shell, donc tu peut faire simplement:


            0 0 * * * /bin/tar czf /path/to/backup-$(date +%Y%m%d-%H%M%S).tar.gz /path/to/folder
            • [^] # Re: au hasard...

              Posté par  . Évalué à 3.

              Oui, enfin, attention au piège classique avec ce type d'entrée dans la crontab !

              un extrait de man 5 crontab

              Le sixième champ (le reste de la ligne) indique la commande à exécuter.
              Tout le reste de la ligne, jusqu'au retour chariot ou au caractère %,
              sera exécuté par /bin/sh, ou par le shell mentionné dans la variable
              SHELL du fichier cron. Les signes pourcent (%) dans les commandes
              seront transformés en retour-chariot, sauf s'ils sont précédé par un
              backslash \. Toutes les données se trouvant à la suite du premier %
              seront transmises à la commande sur son entrée standard. Il n'est pas
              possible d'écrire une commande sur plusieurs lignes, comme on le ferait
              dans un shell avec le \ final.


              Tout ça pour dire qu'il faut échapper tous les % si tu ne veux pas de surprises !! ;)

Suivre le flux des commentaires

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