8

I know this question has been asked (and answered) before, but it seems my situation is unique, because I cannot have any of the solution to work.

Running, I need to rename all my photos from *.JPG to *.jpg.

Let's say I don't need recursive, just all the pictures in the same folder.

The problem I meet is this one:

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

Same problem using rename, with that kind of command:

rename 's/\.JPG$/.jpg/' *.JPG
P1020558.JPG not renamed: P1020558.jpg already exists
2
  • 1
    Came on, you are at one step to make it! What script do you have by now?
    – Lucio
    Nov 6, 2014 at 15:30
  • 5
    Which filesystem the files are on? I guess it's not ext4...
    – Rmano
    Nov 6, 2014 at 17:19

4 Answers 4

14

It is really simple:

  1. Rename to something else than the same value with different case

    rename 's/\.JPG$/\.jpgaux/' *.JPG
    
  2. Now rename that something else to .jpg back again, but lowercase this time

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

Demo: http://paste.ubuntu.com/8853245/

Source: How to change extension of multiple files from command line? Thanks to Chakra!

11
  • Smart ... or stupid of me, depends on the point of view.Tx Nov 6, 2014 at 16:19
  • None of both.. Remember to mark it as accepted to close the question :)
    – Lucio
    Nov 6, 2014 at 16:25
  • 1
    @Lucio,...I guess that the files are on a case-insensitive filesystem (vfat, ntfs); otherwise the "plain" rename would work.
    – Rmano
    Nov 6, 2014 at 17:18
  • 1
    @Lucio I think you misunderstood the OP's question. He/She wants to rename P1020558.JPG to P1020558.jpg but he/she has another file which is that exist with same name P1020558.jpg. Then gets the error: P1020558.JPG not renamed: P1020558.jpg already exists. Also your solution is wrong because the name of files are the same and the solution doesn't effect any changes and still he/she will have the error. for example test on touch Image{1..5}.JPG;touch Image{1..5}.jpg your own answer. Nov 8, 2014 at 21:24
  • 1
    @KasiyA before your edit, that was not the case. My answer solves the original OP issue.
    – Lucio
    Nov 12, 2014 at 14:04
2

really easy with mmv:

sudo apt install mmv

mmv \*.JPEG \#1.jpeg
2

If αғsнιη is right in his comment, and I think he is, OP's problem is that a similarly named file already exists. If that is the case, the script will have to check if the targeted file name (lowercase) already exists, and (only) if so, rename the original file additionally (not only lowercase extension) to prevent the name error, e.g.

image1.JPG

to

renamed_image1.jpg

since image1.jpg would raise an error

If so, a python solution to rename could be:

#!/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)

The script renames:

image1.JPG -> image1.jpg

but if image1.jpg already exists:

image1.JPG -> renamed_image1.jpg

###How to use

Copy the script into an empty file, save it as rename.py, make it executable and run it by the command:

<script> <directory_of_files>
10
  • Did you read that the question mentions the following error? mv: ‘P1010521.JPG’ and ‘P1010521.jpg’ are the same file. Are the same file… Nov 8, 2014 at 22:33
  • @gniourf_gniourf that seems in contradiction with the fact that renaming is impossible in his command (.JPG and .jpg) Nov 8, 2014 at 22:35
  • Where's the contradiction? Nov 8, 2014 at 22:36
  • 1
    Very likely, OP is on a case-insensitive filesystem (as was already mentioned in several comments). As an example, try it yourself on a pendrive with a FAT32 partition ;). Nov 8, 2014 at 22:40
  • 1
    @gniourf_gniourf Yes I know if the file is copy of the same file with different name. and also I understand P1020558.JPG not renamed: P1020558.jpg already exists what is the meaning of this command. If you are not sure. test it for yourself all of these files are the same file with different names. And the OP nowhere said he/she use FAT32 file system. Nov 8, 2014 at 23:03
1

This works best I think, as perl supports running code in the regex

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

remove the -n to actually rename the files

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .