Partage
  • Partager sur Facebook
  • Partager sur Twitter

Shell - script recopie/suppression

recopie et suppression de fichiers et répertoires

    13 juillet 2020 à 18:26:51

    Bonjour,

    J'aimerais créer un script permettant de recopier les éléments d'un répertoire vers un autre répertoire, seulement s'il n'existe pas et supprimer un élément dans le second s'il ne se trouve pas dans le premier répertoire mais je ne sais pas par où commencer. 

    Vous l'aurez compris c'est un script de sauvegarde...

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2020 à 19:34:26

      Salut,
      Tu ne dis pas sous quel système d'exploitation tu te trouves, nu quel genre de script tu désires.
      C'est plus compliqué que les sauvegardes habituelles car tu fais une double comparaison.
      En général, les sauvegardes ne se soucient pas si le fichier n'existe pas dans le départ mais existent dans la destination.
      Ils remplacent seulement la vieille version par une nouvelle si requis.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        13 novembre 2020 à 0:10:11

        PierrotLeFou a écrit:

        Salut,
        Tu ne dis pas sous quel système d'exploitation tu te trouves, ni quel genre de script tu désires.
        C'est plus compliqué que les sauvegardes habituelles car tu fais une double comparaison.
        En général, les sauvegardes ne se soucient pas si le fichier n'existe pas dans le départ mais existent dans la destination.
        Ils remplacent seulement la vieille version par une nouvelle si requis.

        Oui désolé, je ne suis pas habitué des forums, c'est un script Shell à faire tourner sur Raspbian donc Linux, c'est la double comparaison qui me pose problème justement... Il me faudrait cette doubler comparaison pour gagner du temps et des ressources
        • Partager sur Facebook
        • Partager sur Twitter
          13 novembre 2020 à 2:35:25

          D'abord, je ne suis pas sur Linux mais sur Windows. Cependant, j'ai déjà travaillé sur Unix.
          Ensuite, tu ne parles que des fichiers. Que fais-tu si c'est un répertoire entier qui diffère?
          En fait, tu as besoin des objets se trouvant dans la source et la destination, que tu compares ensuite.
          Tu pourrais faire un  ls  suivi d'un  sort  pour avoir les éléments triés de chaque côté.
          Tu épures si requis pour ne garder que les noms que tu places dans deux fichiers (par exemple, placés dans /home/ton_nom/tmp/)
          J'ai d'abord pensé à merge, mais ça ne semble pas convenir.
          Si tu fais un  diff -u  de tes deux listes, tu devrais avoir des lignes commençant par '-' et '+'.
          Il y a peut-être moyen de jouer avec ça pour arriver à tes fins.
          Utilises grep ou sed pour sélectionner.
          Avec ça, tu pourrais te générer un script temporaire qui ne contiendrait que des rm ou des cp.
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            13 novembre 2020 à 9:39:17

            Bonjour,

            Sinon, il y a rsync qui implémente déjà ce genre de fonctionnalités, ce qui sera toujours mieux que d'écrire ce type de script à la main à grand coup de bidouillage.

            Je pense à une commande comme:

            rsync -v -r --ignore-existing --delete src/ dest/

             Attention quand même aux fichiers spéciaux et aux liens (et à tout type d'exception auxquels tu pourrais penser) avant de l'utiliser en prod.

            À la place de --ignore-existing, il y a aussi --update, pour ne copier que les fichiers qui n'existent pas dans dest/ ou qui ont une date de modifications plus récentes dans src/.

            -
            Edité par KoaTao 13 novembre 2020 à 9:45:35

            • Partager sur Facebook
            • Partager sur Twitter
              13 novembre 2020 à 20:05:04

              Est-ce que ça va éliminer ceux de dst qui ne sont plus dans src?
              et recopier ceux de src qui ne sont pas dans dst?
              Comme fichiers spéciaux, il y a les hard link, les soft link, les fichiers commençant par un point comme .bashrc, et les entrées '.' et '..'
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                13 novembre 2020 à 21:40:05

                PierrotLeFou a écrit:

                Est-ce que ça va éliminer ceux de dst qui ne sont plus dans src?
                et recopier ceux de src qui ne sont pas dans dst?

                Bah non, j'ai juste choisi ces options parce que je trouvais que ça faisait jolie sur mon écran. :lol:

                De même pour ma dernière phrase de mon post précédent, je voulais juste dire que certains préfère voir update parce qu'il trouve ce mot plus beau. Aucune considération technique, que artistique.

                Si tu doutes des capacités de rsync et que tu n'as pas envie de lire sa doc, que tu penses que tu peux écrire un script shell qui fera mieux qu'un logiciel qui a plus de 20 ans d'âge, écrit par des chercheurs en informatique (dont un qui a conçu samba au passage), largement utilisé et reconnu par des milliers d'utilisateurs, je te souhaite bon courage.

                (désolé le confinement rend sarcastique je crois :D ).

                En passant, un fichier caché n'est pas un fichier spécial, c'est juste un fichier dont le nom commence par un point. C'est les explorateurs de fichiers ou des outils comme ls qui choisissent de les traiter différemment.

                -
                Edité par KoaTao 13 novembre 2020 à 21:45:11

                • Partager sur Facebook
                • Partager sur Twitter
                  14 novembre 2020 à 1:45:33

                  Je posais simplement la question. Comme je l'ai dit, je ne suis pas sur Linux.
                  Et ce n'est pas moi le PO. C'est SA responsabilité de lire la doc.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                  Shell - script recopie/suppression

                  × 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