Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a Media Temple (dv) server which I am setting Magento up on.

I have uploaded a few thousand images to the /media/import directory that the client has provided me with. The problem is, some images are .jpg and others are .JPG.

Is there a way of batch renaming them on the server? I really don't want to have to do it locally and the re-upload them all.

I would ideally make them all lowercase so that they are uniform with the other image naming schemes used by Magento.



share|improve this question
up vote 3 down vote accepted

A bash suggestion:

   for file in *.JPG; do newfile=`echo $file|sed 's/.JPG$/.jpg/'` ; mv -i "$file" "$newfile" ; done

It loops over all the files with a .JPG extension, and for each of them it uses sed to construct the new filename by turning a terminal .JPG into a terminal .jpg, and performs the mv. The -i is just in case you have a fred.JPG and a fred.jpg already. Don't forget to distinguish between single quotes and backticks, both of which are used, and aren't interchangeable.

share|improve this answer
Or use the preferred $(). Also, variables that contain filenames should always be quoted in case there are spaces in the names. – Dennis Williamson Nov 12 '10 at 15:15
Dennis is absolutely right, I should have thought of that, and have modified the above accordingly. On the other hand, filenames with spaces are an aberration and should be avoided anyway! (opinion! opinion!) – MadHatter Nov 12 '10 at 16:26
Should I just run this from within the directory using Terminal? – dannymcc Nov 12 '10 at 20:43
@dannymcc: Yes. MadHatter: Photographs and music are two of the file types that one should expect to spaces in their names. – Dennis Williamson Nov 12 '10 at 22:33
Worked a treat, thanks! – dannymcc Nov 12 '10 at 23:07

If you have the utility called rename installed (it's a Perl script) you can do:

rename 'y/A-Z/a-z/' *
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.