Forum Programmation.autre Renommer plusieurs fichiers en même temps

Posté par  .
Étiquettes : aucune
0
27
août
2005

J'aimerais renommer plusieurs fichiers en même temps, ceux-ci étant du type "01 - titre1.wav", "02 - titre2.wav", "03 - titre3.wav", …, en "album - titre1.wav", "album - titre2.wav", "album - titre3.wav", … (rem : le mot album étant constant). Donc, j'aimerais remplacer tout les numéros "0i" par le mot album.

Cela est-il possible en tapant une boucle "for i in *.wav ; do mv …" dans une console par exemple ? Avez-vous une autre idée ?

Merci d'avance ;).

  • # Renommer plusieurs fichiers en même temps

    Posté par  . Évalué à 2.

    Salut, bah oui, tout simple :
    #!/bin/sh
    #
    
    GetTitle ()
    {
      echo $@ | cut -d '-' -f2
    }
    
    for i in *.wav ; do 
    
    	mv "$i" "album - `GetTitle $i`"
    
    done
    
  • # "ren" roxor

    Posté par  . Évalué à 2.

    En bash ça pourrait donner ça :
    # for f in *.wav ; do mv "${f}" "album${f#??}" ; done

    Mais si tu n'es pas à l'aise avec ça, le plus simple serait d'installer un programme appelé "ren", si ta distrib le propose. Après, tu pourras faire par exemple :
    # ren "?? - *.wav" "album - #3.wav"
    Là le "#3" désigne le 3ème wildcard utilisé dans le pattern (les 2 premiers "?" étant les deux premiers). Ou plus simple, mais qui marchera mal si tu as des " - " aussi dans le titre :
    # ren "* - *.wav" "album - #2.wav"
    • [^] # Re: "ren" roxor

      Posté par  . Évalué à 1.

      Slt,

      Tout d'abord, merci à tous pour vos réponses ;).



      J'ai une mandrake 10.0 et le programme "ren" n'est pas proposé.

      De toute façon, la première ligne de commande marche nickel. Peux-tu m'expliquer la syntaxe de "album${i#??} (les # et ??) afin que je puisse réutiliser cela dans un autre cas.

      Merci ;)
      • [^] # Re: "ren" roxor

        Posté par  . Évalué à 5.

        > J'ai une mandrake 10.0 et le programme "ren" n'est pas proposé.

        Argh. Pas de bol...
        Enfin, tu peux toujours te l'installer from-sources si tu veux :
        http://freshmeat.net/projects/ren(...)

        > Peux-tu m'expliquer la syntaxe de "album${i#??}

        `man bash` :p

        Bon, nan, c'est tout simple: "${variable#pattern}" s'évalue en la variable (là c'était notre nom de fichier, $f) dont on retire au début (c'est l'opérateur "#" qui le dit) le pattern (dans notre cas, "??", c'est à dire deux caractères quels qu'ils soient).

        Pour ta culture, les patterns peuvent être des chaines quelconques ou bien contenir des caractères spéciaux (jokers ou wildcards ou que sais-je encore), qui seront interprétés comme pour l'expansion des noms de fichiers :
        - "*" reconnait une chaine quelconque (celui là t'es au moins familier dans le cas de l'expansion des noms de fichiers, genre `ls *.jpg`)
        - "?" reconnait un caractère quelconque
        - "[abc]" reconnait les cactères "a", "b", ou "c"
        - "[0-9]" reconnait les chiffres de 0 à 9 (on aurait pu l'utiliser ici d'ailleurs, genre "album${f#[0-9][0-9]}"), "[a-z]" les lettres miniscules de "a" à "z", etc.

        En plus de l'opérateur "#", y'en a qlqs autres dans le même genre:

        - "##" fait presque pareil sauf qu'il choisi si ambiguité la plus longue des correspondance ("#" lui prend la plus courte, enfin de toute façon ça ne fait une différence que si on utilise "*" qui est le seul wildcard de longueur variable)

        - "%" et "%%" marchent pareil, sauf qu'ils suppriment à la fin de la chaine contenue par la variable

        - "/" est un opérateur de substitution:
        # foo="plip plop plip plop plip"
        # echo "${foo/plop/pluuuup}"
        plip pluuuup plip plop plip

        - "//" aussi, sauf qu'il fait autant de substitutions que possible, et pas juste la première:
        # echo "${foo//plop/pluuuup}"
        plip pluuuup plip pluuuup plip

        Bon, maintenant `man bash` pour plus de détails et les autres opérateurs... (cherches la section "EXPANSION", sous-section "Parameter Expansion". Elle est bonne à connaitre.)

        Et quant au "album" en début de chaine, je suppose que tu auras deviné :)
        • [^] # Re: "ren" roxor

          Posté par  . Évalué à 1.

          OK !!! un grand merci pour tes explications, c t sympa ;)

          ++;)
  • # Renomer des fichier pour que * les liste dans l'ordre numérique

    Posté par  . Évalué à 1.

    Dans le même esprit, un truc utile :

    Pour éviter que 10.png soit listé avant 2.png, par exemple, le principe est de renomer en 0002.png et 0010.png, (on peu mettre plus ou moin de 0, ici 4 chiffres, donc %04d :

    for i in *.png ; do num=$(echo "$i" |sed 's/[^0-9]//g'); mv -v $i `printf "%04d.png" $num`; done
  • # Une autre façon...

    Posté par  . Évalué à 3.

    Voici ma solution :

    $ man rename

    Bon, d'accord... Alors plutôt comme ceci :

    $ rename 's/^\d\d/album/' *.wav

    Qui va remplacer les 2 premiers chiffres (\d\d) en "album".

    Voila, Voila ...

Suivre le flux des commentaires

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