Note que você está usando o script Perl chamadorename distribuído pelo Debian e derivados (Ubuntu, Mint,…). Outras distribuições Linux oferecem um comando completamente diferente e consideravelmente menos útil chamado rename.
y/A-Z/a-z/traduz cada personagem na faixa Aatravés Zpara o personagem correspondente na faixa aatravés z, ou seja ASCII maiúsculas cartas para a letra minúscula correspondente. Para executar a tradução oposta, use y/a-z/A-Z/. Outra maneira de escrever o mesmo comando é rename '$_ = uc($_)' *- ucé a função u cper c ase, e o renamecomando renomeia os arquivos com base na transformação feita na $_variável.
rename '…' *renomeia apenas os arquivos no diretório atual, porque é isso que *corresponde. Os arquivos de ponto (arquivos cujo nome começa com .) também são ignorados.
Se desejar renomear arquivos no diretório atual e nos subdiretórios recursivamente, você pode usar o findcomando para percorrer o diretório atual recursivamente. Há uma dificuldade aqui: se você ligar rename, isso renomeia o diretório e a parte do nome base. Se você chamar renameum diretório antes de retornar a ele ( find -exec rename … {} \;), findficará confuso porque encontrou um diretório, mas esse diretório não existe mais no momento em que tenta descer para ele. Você pode contornar isso, dizendo findque atravessar um diretório antes de agir sobre ele, mas depois você acaba tentando mudar o nome foo/barpara FOO/BARmas o diretório FOOnão existe.
Uma maneira simples de evitar essa dificuldade é fazer com que o comando de renomeação atue apenas no nome base como parte do caminho. A expressão regular ([^/]*\Z)corresponde à parte final do caminho que não contém a /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
O shell zsh fornece recursos mais convenientes para renomear - ainda mais enigmáticos que o Perl, mas mais tersos e geralmente mais fáceis de compor.
A função zmvrenomeia arquivos com base em padrões. Execute autoload -U zmvuma vez para ativá-lo (coloque esta linha na sua .zshrc).
No primeiro argumento para zmv(o padrão a ser substituído), você pode usar os poderosos padrões curinga do zsh . No segundo argumento para zmv(o texto de substituição), você pode usar seus recursos de expansão de parâmetros , incluindo modificadores de histórico .
zmv -w '**/*' '$1$2:u'
Explicação:
-w - atribuir variáveis numéricas automaticamente a cada padrão curinga
**/*- todos os arquivos em subdiretórios, recursivamente ( **/corresponde a 0, 1 ou mais níveis de subdiretórios)
$1 - a primeira variável numérica, aqui correspondente à parte do diretório de cada caminho
$2:u- a segunda variável numérica, que corresponde aqui à parte do nome base de cada caminho, com o :umodificador para converter o valor em maiúsculas
Como um bônus adicional, isso respeita as configurações de local do ambiente.
Se você não tiver certeza sobre um zmvcomando que escreveu, pode passar a -nopção de imprimir o que o comando faria e não alterar nada. Verifique a saída e, se fizer o que deseja, execute novamente o comando sem -nrealmente agir.
rename 'y/a-z/A-Z/' *, conseguirá o que deseja. Cuidado onde você testá-lo.