Como sempre com esse tipo de perguntas e respostas, algumas palavras de cautela:
find . -name '*.JPG' -exec sh -c 'mv "$0" "${0%.JPG}.jpg"' {} \;
Embora funcione bem para a maioria das pessoas na maioria dos casos, é perigoso anunciar publicamente, pois há alguns problemas que podem se transformar em problemas de segurança em alguns contextos.
Isso renomeia arquivos e diretórios. Se renomear os diretórios, ele não conseguirá renomear os arquivos dentro (use a opção -depth)
Ele potencialmente perderá arquivos (foo.JPG foi renomeado para foo.jpg enquanto já existia foo.jpg), ou potencialmente coloca arquivos onde você não quer (considere por exemplo um diretório onde há um arquivo chamado foo .JPG e um chamado foo.jpg que é, na verdade, um link simbólico para /etc/apache2/conf.d. Ele potencialmente quebrará links simbólicos. Há uma condição de corrida que pode permitir que um atacante te engane para renomear qualquer arquivo.
Muitos desses problemas podem ser evitados usando uma ferramenta dedicada a essa tarefa (renomeação em lote de arquivos) em vez de tentar reinventar a roda. O zv do mmv e do zsh vem à mente.