Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compresser automatiquement en .tar.gz un fichier,

Compresser automatiquement en .tar.gz un fichier, des sa sauvegarde

Sujet résolu
    3 mai 2016 à 10:08:57

    Bonjour,

    Je suis étudiant en info, et viens donc de commencer la grande aventure sous Linux. Et bien évidemment, me voici face à un problème :

    J'aimerais faire un script Bash , qui me permette de compresser un fichier ( ça je sais faire ) des sa sauvegarde.

    Par exemple, j'utilise Modelio ( qui est un logiciel de modélisation UML ), lors de la sauvegarde d'un projet, il le sauvegarde dans un fichier ( quoi de plus normal me direz vous ). J'aurais besoin, que le script sache qu'un fichier a été créer ou modifier, et qu'il le compresse directement ( en temps réel ).

    Ceci dans le but de récupérer le fichier ( ftp ) depuis un navigateur web.

    Merci d'avance et bonne journée :)

    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2016 à 11:15:04

      Coucou,

      Tu peux regarder du côté de inotify & co (en particulier inotifywait).

      • Partager sur Facebook
      • Partager sur Twitter
      Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
        3 mai 2016 à 13:28:39

        sous Linux

        :colere:

        et, tu as de bonne capacités en apnée ?

        la machine est sous Linux; nous, nous travaillons dessus, ou avec.
        mais il n'est pas encore possible de nous greffer une puce pour nous assujettir, et qui ferait que nous serions sous Linux.

        -
        Edité par dantonq 3 mai 2016 à 13:29:13

        • Partager sur Facebook
        • Partager sur Twitter

        Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          3 mai 2016 à 14:21:57

          dantonq a écrit:

          la machine est sous Linux; nous, nous travaillons dessus, ou avec.

          Tu peux aussi travailler avec ET dessus, mais bon le risque c'est de la casser, et puis ça ne doit être ni confortable ni pratique. :lol:
          • Partager sur Facebook
          • Partager sur Twitter
          Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
          Anonyme
            3 mai 2016 à 15:36:20

            Salut,

            Si tu veux effectuer une tâche automatiquement, je te conseille d'utiliser une tâche cron. Tu as une très bonne explication sur le chapitre Executer un programme à une heure différée du cours Reprenez le contrôle à l'aide de Linux. Cette tâche pointera vers un script bash. Tu choisiras tout les combien de temps tu souhaites lancer la commande.

            Tu peux aussi lancer automatiquement le script à l'extinction (la compression ne devrais pas trop retarder l'extinction de la machine). Mais je trouve la solution cron plus souple et moins risquée (si tu es en mode veille mais que tu n'a plus de courant, le script ne se lancera pas).

            Une autre solution, consiste à démarrer ton développement dans un terminal, sans le décrocher car tu rajoutera à la suite un alias pour exécuter la commande une fois que tu auras fermé ton environnement de développement :

            macommande && monalias || echo "erreur d’exécution"

            Et pour le script en lui-même, il devra simplement comparer les fichiers UML avec les fichiers compressés. Si ces fichiers sont présent en UML et compressé, il n'y aura pas besoin de les recompresser à nouveau, sinon, s'il n'y a qu'un fichier UML sans fichiers compréssés liés, alors il faudra... compresser ! Le script ressemblera à quelque chose comme ça :

            #!/bin/bash
            
            LC_ALL=C
            
            for i in *; do
            
            	if [[ -f "$i" && "$i" != *".tar.bz2" && ! -e "$i.tar.bz2" ]]; then
            		
            		tar -cvf "$i".tar "$i" > /dev/null && bzip2 "$i".tar > /dev/null && echo "Archive créée pour $i" || echo "Erreur lors de la création du fichier compressé pour $i"
            
            	else
            
            		echo "Aucune action effectuée pour $i"
            
            	fi
            
            done

            Bien sûr, il faudra rajouter le chemin vers le dossier de développement. Tu peux évidement rediriger les echo vers un fichier *.log ou même mieux faire un envoi de mail (au cas où il devais arriver malheur à la machine) si tu utilises une tâche cron.

            -
            Edité par Anonyme 3 mai 2016 à 15:45:31

            • Partager sur Facebook
            • Partager sur Twitter
              3 mai 2016 à 15:53:38

              Bonjour,

              Merci a vous Mad scientist et  AminNairi pour votre aide ;) En faite j'ai choisi d'utiliser Cron, qui exécute un script toutes les 5 minutes. Celui-ci quoi qu'il arrive remplacera l'ancien fichier qui sera mis dans un .old .

              Je renvoie toutes les notifications de modification sur ma boite mail grâce a iwatch ;)

              Merci beaucoup, et bonne journée

              • Partager sur Facebook
              • Partager sur Twitter
                3 mai 2016 à 15:58:03

                cron dépend du temps et non des modifications faites sur le système de fichier. À la limite il existe un équivalent, basé sur inotify: incron, qui sera largement plus efficace pour ce que tu sembles vouloir faire.

                -
                Edité par Mad scientist 3 mai 2016 à 16:01:30

                • Partager sur Facebook
                • Partager sur Twitter
                Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).

                Compresser automatiquement en .tar.gz un fichier,

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown