Journal Renommer un fichier en bash...

Posté par  (site web personnel, Mastodon) .
Étiquettes : aucune
0
29
sept.
2003
Je sais, c'est vraiment tout con.. je suis une sous merde..

Mais comment renommer l'extension de fichiers en bash ?

Mon script transforme les fichiers png en jpg mais du coup, le fichier s'appelle fichier.png.jpg (c pas joli)

(je fais un for i in *.png do convert $i $i.jpg )

Argh.. je suis nul...
  • # Re: Renommer un fichier en bash...

    Posté par  . Évalué à 3.

    Il parait qu'il existe « rename », mais je n'ai jamais essayé.

    Sinon il faut utiliser les motifs shell

    ${i##.png}.jpg

    Regarde dans les astuces, elle est passée.
    Sinon man bash marche bien aussi.
    • [^] # Re: Renommer un fichier en bash...

      Posté par  . Évalué à 3.

    • [^] # Re: Renommer un fichier en bash...

      Posté par  . Évalué à 4.

      la commande la plus simple:

      rename 's/.png.jpg$/.jpg/' *

      Le $ est important seulement si tu as des fichiers qui s'appellent toto.png.jpg.tata, car il indique la fin du nom (donc je pense que tu peux t'en passer).

      Pour apprendre à utiliser rename, consulte n'importe quelle doc sur les expression régulières. Les expressions régulières (utilisées par rename ou sed entre autres) sont des outils qui une fois maîtrisés ont une puissance monstrueuses...
      • [^] # Re: Renommer un fichier en bash...

        Posté par  . Évalué à 1.

        la commande la plus simple

        Bof, je préfère celle que j'ai écrite en dessous, c'est plus simple et plus compréhensible pour un novice (donc plus compréhensible tout court).

        rename .png .jpg *.png

        C'est marrant que tu proposes ça comme solution car le man dit :
        rename from to file
    • [^] # Re: Renommer un fichier en bash...

      Posté par  . Évalué à 4.

      Rename :

      rename 'motif à remplacer' 'motif remplaçant' 'fichiers'

      exemple :

      rename png jpg *.png

      Attention à ce que le 'motif à remplacer' n'apparaisse pas dans le nom du fichier, sinon :

      rename .png .jpg *.png

      Pour ce qui est du bash :

      ${VAR%<motif à retirer>} = retirer une fois depuis la fin
      ${VAR%%<motif à retirer>} = retirer autant de fois que possible depuis la fin
      ${VAR#<motif à retirer>} = retirer une fois depuis le début
      ${VAR##<motif à retirer>} = retirer autant de fois que possible depuis le début

      C'est très utile pour retirer les chemins et les extension, retirer tous les chemins (tu peux aussi utiliser basename) :

      ${VAR##*/}

      Retirer toutes les extensions :

      ${VAR%%.*}

      Tu peux bien sûr concaténer directement comme cela à été montré par Obsidian.

      C'est valable pour zsh aussi.
      • [^] # Re: Renommer un fichier en bash...

        Posté par  . Évalué à 1.

        Petite précision : ne pas mettre ' < > dans les motifs bien sûr comme on le voit dans les exemples (sauf si ça fait partie des motifs, mais il faut peut être les protéger des ces cas là).
  • # Re: Renommer un fichier en bash...

    Posté par  (site web personnel) . Évalué à 6.

    for i in *.png do convert $i `basename $i .png`.jpg
  • # Re: Renommer un fichier en bash...

    Posté par  (site web personnel) . Évalué à 4.

    (je fais un for i in *.png do convert $i $i.jpg )
    Fais gaffe, fais plutôt:

    for i in *.png do convert "$i" "$i.jpg"

    Car si tu as "un photo bidon.jpg" ça ne marche pas.
  • # Re: Renommer un fichier en bash...

    Posté par  (site web personnel) . Évalué à 2.

    Tu peux essayer la commande mmv qui est assez performante, même si je ne l'ai jamais essayée.

    http://packages.debian.org/unstable/utils/mmv.html(...)

Suivre le flux des commentaires

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