Eu tenho, por exemplo, TREE.wav, ONE.WAV. Eu quero renomear para tree.wav, one.wav. Como faço para renomear todos os arquivos para letras minúsculas?
Eu tenho, por exemplo, TREE.wav, ONE.WAV. Eu quero renomear para tree.wav, one.wav. Como faço para renomear todos os arquivos para letras minúsculas?
Respostas:
Se você estiver confortável com o terminal:
cd
e arraste e solte na janela a pasta que contém os arquivos a serem renomeados.ls
e pressione Enter.Cole este código e pressione Enter:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
e pressione Enter novamente.(Obrigado a @bavarious no Twitter por algumas correções e obrigado a John Whitley abaixo por tornar isso mais seguro em sistemas de arquivos que não diferenciam maiúsculas de minúsculas.)
foo.txt
e FOO.TXT
, isso pode destruir um deles.
mv "$f" "${f,,}"
declare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
A pergunta feita é geral e também importante, portanto, desejo fornecer uma resposta mais geral:
O caso mais simples (seguro na maioria das vezes e no Mac OS X, mas continue lendo):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Você também precisa lidar com espaços em nomes de arquivos (qualquer sistema operacional):
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Você precisa lidar com segurança com nomes de arquivos que diferem apenas por maiúsculas e minúsculas em um sistema de arquivos com distinção entre maiúsculas e minúsculas e não sobrescrever o destino (por exemplo, Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Nota sobre o Mac OS X:
O sistema de arquivos do Mac não faz distinção entre maiúsculas e minúsculas, preservando maiúsculas e minúsculas.
No entanto, não há necessidade de criar arquivos temporários, como sugerido na resposta e comentários aceitos, porque dois nomes de arquivo que diferem apenas por caso não podem existir em primeiro lugar, ref .
Para mostrar isso:
$ mkdir test
$ cd test
$ touch X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 X
$ mv X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 x