Você pode consertá-lo (toda vez que isso acontece) com este comando:
find local_directory_name -depth -exec sh -c 'dir="$(dirname "$0")"; FILE="$(basename "$0")"; lowfile="$(echo "$FILE" | tr "A-Z" "a-z")"; if [ "$lowfile" != "$FILE" ]; then mv "$0" "$dir/$lowfile"; fi' {} ";"
Digite tudo isso como uma linha (substituindo local_directory_name
com o nome do diretório para o qual você copiou os arquivos).
Você pode dividi-lo em várias linhas inserindo barras invertidas.
Ou você pode colocar a parte depois de sh -c
em um arquivo de script.
Enumera todos os arquivos no diretório (incluindo subdiretórios, recursivamente)
e executa os comandos dados em cada um.
-depth
faz o trabalho "bottom-up", então processa todas as entradas em um diretório
antes de processar (renomear) o próprio diretório.
Cada nome de arquivo (caminho relativo a partir de local_directory_name ) é dividido
em uma parte do diretório e um nome de arquivo simples (apenas o componente inferior).
Em seguida, o nome do arquivo é convertido de maiúsculas para minúsculas.
Se isso for diferente do nome do arquivo existente,
ele renomeia o arquivo para o nome minúsculo.
Eu adicionei essa verificação para evitar que as mensagens de diagnóstico que você
de tentar renomear um arquivo para si mesmo, o que aconteceria se você tivesse um arquivo
cujo nome não continha letras (isto é, numerais e caracteres especiais apenas).
Ou, nesse caso, se você tivesse um arquivo cujo nome não continha letras maiúsculas .
Considerações finais:
Outra maneira de evitar erros de mv 123 123
é adicionar -name "*[A-Z]*"
após -depth
,
que informa find
para processar apenas nomes que contenham pelo menos uma letra maiúscula.