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
C'est vraiment simple:
Renommer en autre chose que la même valeur avec une casse différente
rename 's/\.JPG$/\.jpgaux/' *.JPG
Maintenant, renommez ce quelque chose d'autre en .jpg
retour, mais en minuscule cette fois
rename 's/\.jpgaux$/\.jpg/' *.jpgaux
Source: Comment changer l'extension de plusieurs fichiers à partir d'une ligne de commande? Merci à Chakra !
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
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>
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