Printable Version of Topic

Click here to view this topic in its original format

Linuxhelp _ Tips and Tricks _ Moving Groups Of Files From Upper To Low

Posted by: Corey Jul 15 2003, 09:01 AM

Often times when you transfer files from Windows to Linux, they end up with all Capital letters. While generally, this isn't much of a problem, sometimes this includes large directories and Linux will not see "FILENAME.EXE" the same as "filename.exe". The solution is to issue the following perl command to rename everything in a directory from upper to lower case:

perl -le 'rename $_, lc( $_ ) foreach <*>'

This "tip" is available through the random tip son the frontpage.

Posted by: Hemant Dec 10 2003, 05:42 AM

just a suggestion...
We should also explain the tricks

Posted by: hughesjr Dec 10 2003, 06:41 AM

Ok ... here is the explaination:

PERL is magic laugh.gif
Actually, the perl -l is to run perl, -e switch allows you to execute the information inside the quotes with the perl interpretor ... it's like running a perl script that contains the information inside the quotes ... in this case the perl command that is executed is: rename $_, lc( $_ ) foreach <*>

$_ (in perl) is the topic ... which in generic terms means the currently selected item...if you want a more detailed explaination of topic, see In this code, the topic is going to be a filename.

lc() is a function in perl to convert text to lowercase ... in this example, it converts $_ (the filename) to lowercase.

rename x,y in perl will rename file x to the name y ... it is very similar to the command mv in bash (except there is a comma between filenames). In this case $_ (the original filename) is renamed to lc($_) the lowercase filename.

foreach defines a list of items to do sometime on ... in this case <*> will generate a list including all files in a directory...try this command to see a list of all the files in a directory: perl -le 'print $_ foreach <*>'

So, put it all together and perl -le 'rename $_, lc( $_ ) foreach <*>' will convert all filenames in a directory to thier lowercase equivalant.

I actually know a little bit about perl ... see my old ... which I haven't updated since 1999 (i think) ... I don't even know the passwords to make changes to the site anymore....(WOW what a flashback!)

Posted by: Hemant Dec 11 2003, 05:26 AM

Yeah..Thanks for explanation...i have checked your site also...

Posted by: hughesjr Dec 11 2003, 07:43 AM

Just so everyone knows ... I was an NT and UNIX guy back in 1999 (I was just playing around with Linux on a webserver or 2 back then)...I am a Linux guy now! laugh.gif

(Like I said before...I haven't changed that site since 1999).
And now, back on topic:

For anyone who would rather convert upper to lower case with a shell it is (I named it

# lowerit
# convert all file names in the current directory to lower case
# only operates on plain files--does not change the name of directories
# will ask for verification before overwriting an existing file
for x in `ls`
  if [ ! -f $x ]; then
  lc=`echo $x  | tr '[A-Z]' '[a-z]'`
  if [ $lc != $x ]; then
        mv -i $x $lc
# End of lowerit script

The above file needs to be in the directory you want to change files in ... and it won't currently do files that start with a . (like .Abc123Z) won't get converted ... because most . files are setup files and you don't want to change their case. If you do want to also change the case of . files, change the line for x in `ls` to for x in `ls -a`

Posted by: Hemant Dec 20 2003, 05:02 AM

How about renaming whole filename from uppercase to is a solution using gawk..
$ ls -l|awk `{printf("mv %s %sn",$9,totupper($9))|"/bin/bash"}`

Powered by Invision Power Board (
© Invision Power Services (