Bash: Convert Filenames to All Lowercase

For today, a short little script to rename files that have capital letters in the name, to all lower case. Years ago this was a common need when copying files from a DOS based PC to a UNIX computer. That’s not so much an issue these days. However, it is a common problem when migrating a website from an IIS server, or an OS X server, to a Linux server, where case sensitivity all of a sudden becomes a concern.


It skips any files that would overwrite any previously existing files. Really, nothing too fancy here…

# Shell script to rename files, in the current directory, that contain
# upper case characters to all lower case characters.
# -------------------------------------------------------------------------
# Copyright (c) 2012 Jay C, Everson
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------

for file in *
#Check to see if file name contains any uppercase characters
    iscap=`echo $file | awk '{if ($0 ~ /[[:upper:]]/) print }'`
    if [[ -n $iscap ]]
#Generate the new file name
        newname=`echo $file | tr '[A-Z]' '[a-z]'`
#Check to see if the new name already exists
        if [ -f $newname ]
            echo "$newname exists, skipping $file..."
            echo "Moving $file to $newname"
            mv $file $newname
banner ad

Comments are closed.