Renommer extension linux

Bonjour,

Quelqu'un saurait comment renommer une serie de fichier d'extension .x en .y de tous les répertoires et sous reprtoires?

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    c'est sans doute pas la méthode la plus élégante...

    en console :

    for i in `find . -name "*.x"`
    do
    cp $i ${i%.x}.y
    done
    

    attention aux ` qui sont différents de ' ou de " !!

    j'ai mis un "cp" au lieu de "mv" car je pense que c'est plus sur....
    ensuite
    for i in `find . -name "*.x"`
    do
    rm $i
    done
    

    si ca a fait ce que tu voulais

    Phiphi
    1. Encore plus rapide :
      rename 's/ext1$/ext1/' *.ext1

      voir man rename !
      1. plutôt rename 's/ext1$/ext2/' *.ext1

        Ça marche super sinon, merci !

        Ah, et n'hésitez pas à utilisez les options -v -n pour voir ce que ça va faire. Parfois, ça rassure bien.

        Comme disait Pentaire rause, rien ne vaut les bonnes pages de manuel
    2. Salut,

      find repertoire -name "*.ext1" -exec rename .ext1 .ext2 {} \;
      1. Bonjour, je voudrais faire la même chose, à une petite différence :

        j'ai toto.ext1, je veux toto.ext2

        Avec le bout de code proposé, j'ai toto.ext1.ext2

        Pouvez vous m'aider ?
        1. Super c'est ce que je cherchais
          Faut que je bosse le shell, je perdrai moins de temps.
          Merci pour la commande
          1. Modérateur
            Des solutions sympas, mais pas performantrs, pourquoi ne pas utiliser un pipe avec xargs et rename ?

            johand@hathor:~/tmp$ for i in $(seq -f %03.0f 0 999); do echo $i > $i.ext1 ; done

            ohand@hathor:~/tmp$ time for file in $(find . -type f -name '*ext1') ; do rename 's/ext1$/ext2/' $file; done

            real 1m16.643s
            user 1m8.228s
            sys 0m8.501s
            johand@hathor:~/tmp$ time find . -type f -name '*ext2') |xargs rename 's/ext2$/ext1/' $file; done
            bash: syntax error near unexpected token `)'
            johand@hathor:~/tmp$ time find . -type f -name '*ext2' | xargs rename 's/ext2$/ext1/' $file

            real 0m0.551s
            user 0m0.344s
            sys 0m0.220s
            jjohand@hathor:~/tmp$ uname -a
            Linux hathor 2.6.31-16-generic #53-Ubuntu SMP Tue Dec 8 04:01:29 UTC 2009 i686 GNU/Linu

            On voit les différences en temps d'exécution.....