I have 1,000,000 files in some folders and subfolders. I want to rename them from lowercase to uppercase using shell commands. I don't want to modify the extension. only filename part.I have found this one:rename 's/^([^.]*)\.(.*)$/\U$1\E.$2/' *but it is not recursive and only works on files in current folder.Then I tried this one:find . -depth  -execdir rename 's/^([^.]*)\.(.*)$/\U$1\E.$2/' {} \;But no files changed.How can I use it recursively? 
Change filename from lowercase to uppercase recursively
find;regular expression;rename
Assuming that you have the Perl rename provided by Debian and derived distributions such as Debian and Ubuntu, you're almost there. The problem is that -execdir passes a file name prefixed with ./ to the command. (The reason for that is that some commands treat arguments starting with some characters specially; this way, if you have a file called -foo, it's passed as ./-foo and therefore treated as a file and not as an option.) With your regex, this results in $1 being always empty, and hence the new name is identical to the old name.Accommodate for this ./ in your regular expression.find . -depth  -execdir rename 's/^(\.\/[^.]*)\.(.*)$/\U$1\E.$2/' {} \;