Forum Programmation.shell retirer une chaîne de caractère à la fin du nom de fichier

Posté par  .
Étiquettes : aucune
0
7
jan.
2007
Bonsoir à tous,

j'ai qq fichiers dans un répertoire et je veux supprimer dans le nom des fichiers tout ce qui est après une chaîne de caractère précise.

exemple de nom de fichier : cars&max=250&adv_g=&adv_age=7&adv_so
qui doit devenir : cars
à chaque fois la partie à supprimer commence par &max=250

je suis novice, j'essaie avec "for i in", j'ai trouvé comment supprimer des trucs au début des noms de fichiers mais pas à la fin. J'ai l'impression que le & dérange les commandes.

Merci d'avance pour votre aide
  • # oups

    Posté par  . Évalué à 1.

    oups, un refresh de trop, dsl.
    • [^] # Re: oups

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

      Avec bash, tu peux peut-etre faire quelque chose dans ce genre peut-etre :


      for i in *;
      do
      NEWNAME=`echo "$i" | sed -e "s/&cars=250.*$//g"`;
      mv -f $i $NEWNAME;
      done
      • [^] # Re: retirer une chaîne de caractère à la fin du nom de fichier

        Posté par  . Évalué à 1.

        J'ai essayé mais ça me renvoit cette erreur :

        mv: `cars&max=250&adv_g=&adv_age=7&adv_so' `cars&max=250&adv_g=&adv_age=7&adv_so' are the same file
        • [^] # Re: retirer une chaîne de caractère à la fin du nom de fichier

          Posté par  . Évalué à 2.

          Salut,

          Tu peux essayer avec ça :
          for f in *\&max=250* ; do cp "$f" "${f%%&max=250*}" ; done

          A+
          JJD
        • [^] # Re: retirer une chaîne de caractère à la fin du nom de fichier

          Posté par  . Évalué à 1.

          Hello,

          Cela devrait mieux fonctionner avec "&max=.*" dans la commande sed:

          Ainsi:

          NEWNAME=`echo "$i" | sed -e "s/&cars=250.*$//g"`;

          deviendrait

          NEWNAME=`echo "$i" | sed -e "s/&max=.*$//g"`;


          Bon courage !

          Cdlt,

          PS: Pour faire un nettoyage du nom du fichier par rapport au premier '&' trouvé, sed est encore un bon camarade:

          NEWNAME=$(echo "$i" | sed -e "s/^\([^&]*\)&.*$/\1/g")

          A tester avant toute intégration :-)
          • [^] # Re: retirer une chaîne de caractère à la fin du nom de fichier

            Posté par  . Évalué à 1.

            Super, les 2 techniques fonctionnent !!!

            j'ai changé
            for f in *\&max=250* ; do cp "$f" "${f%%&max=250*}" ; done
            par
            for f in *\&max=250* ; do mv "$f" "${f%%&max=250*}" ; done
            car sinon il restait les fichiers d'origine

            et pour l'autre technique, c'est tout bon avec ça :
            for i in *;
            do
            NEWNAME=`echo "$i" | sed -e "s/&max=.*$//g"`;
            mv -f $i $NEWNAME;
            done

            Merci beaucoup et bon dimanche :)
  • # rename

    Posté par  . Évalué à 3.

    rename 's/&max250.*//' *

    bon ok rename c'est du perl, mais il y a de grandes chances de le trouver dans la plupart des distributions.

Suivre le flux des commentaires

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