web-dev-qa-db-fra.com

Comment renommer l'extension de fichier en minuscule?

Je sais cette question a déjà été posée (et sa réponse) auparavant , mais il semble que ma situation soit unique, car je ne peux avoir aucune des solutions pour travailler.

En cours d'exécution, je dois renommer toutes mes photos de *.JPG en *.jpg.

Disons que je n'ai pas besoin de récursif, juste toutes les images dans le même dossier.

Le problème que je rencontre est celui-ci:

mv: ‘P1010521.JPG’ and ‘p1010521.jpg’ are the same file

Même problème en utilisant rename, avec ce genre de commande:

rename 's/\.JPG$/.jpg/' *.JPG
P1020558.JPG not renamed: P1020558.jpg already exists
5
littlevache

C'est vraiment simple:

  1. Renommer en autre chose que la même valeur avec une casse différente

    rename 's/\.JPG$/\.jpgaux/' *.JPG
    
  2. Maintenant, renommez ce quelque chose d'autre en .jpg retour, mais en minuscule cette fois

    rename 's/\.jpgaux$/\.jpg/' *.jpgaux
    

Démo: http://paste.ubuntu.com/8853245/

Source: Comment changer l'extension de plusieurs fichiers à partir d'une ligne de commande? Merci à Chakra !

13
Lucio

SI KasiyA a raison dans son commentaire, et je pense qu'il l'est, le problème d'OP est qu'un fichier portant le même nom existe déjà. Si tel est le cas, le script devra vérifier si le nom du fichier cible (minuscule) existe déjà et (le cas échéant), renommer le fichier d'origine en plus (pas uniquement l'extension en minuscule) pour éviter l'erreur de nom, par exemple.

image1.JPG

à

renamed_image1.jpg

puisque image1.jpg soulèverait une erreur

Si tel est le cas, une solution python à renommer pourrait être:

#!/usr/bin/env python3

import os
import shutil
import sys

directory = sys.argv[1]
for file in [f for f in os.listdir(directory) if f.endswith(".JPG")]:
        newname = file[:file.rfind(".")]+".jpg"
        if os.path.exists(directory+"/"+newname):
                newname = "renamed_"+newname
        shutil.move(directory+"/"+file, directory+"/"+newname)

Le script renomme:

image1.JPG -> image1.jpg

mais si image1.jpg existe déjà:

image1.JPG -> renamed_image1.jpg

Comment utiliser

Copiez le script dans un fichier vide, enregistrez-le sous le nom rename.py, exécutez-le et exécutez-le à l'aide de la commande suivante:

<script> <directory_of_files>
2
Jacob Vlijm

Cela fonctionne mieux, je pense, car Perl supporte le code en cours d'exécution dans la regex

rename -n 's/(\.[A-Z]+$)/lc($1)/ge' *.*[A-Z]*

supprime le -n pour renommer les fichiers

1
HeLi8