Si hallas algún fallo en tu código o proyecto, recuerda probar siempre en un entorno de testing antes añadir el código al proyecto final.
Solución:
Si se siente cómodo con la terminal:
- Abra Terminal.app, escriba
cd
y luego arrastre y suelte la Carpeta que contiene los archivos a renombrar en la ventana. - Para confirmar que está en el directorio correcto, escriba
ls
y presione enter. -
Pegue este código y presione enter:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
- Para confirmar que todos sus archivos están en minúsculas, escriba
ls
y presione enter de nuevo.
(Gracias a @bavarious en Twitter por algunas correcciones, y gracias a John Whitley a continuación por hacer esto más seguro en sistemas de archivos que no distinguen entre mayúsculas y minúsculas).
La pregunta tal como se hizo es general y también importante, por lo que deseo proporcionar una respuesta más general:
Caso más simple (seguro la mayor parte del tiempo y en Mac OS X, pero sigue leyendo):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
También debe manejar espacios en los nombres de archivo (cualquier sistema operativo):
IFS=$'n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Debe manejar de manera segura nombres de archivo que difieren solo entre mayúsculas y minúsculas en un sistema de archivos que distingue entre mayúsculas y minúsculas y no sobrescribir el destino (por ejemplo, Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Nota sobre Mac OS X:
El sistema de archivos de Mac no distingue entre mayúsculas y minúsculas, conserva las mayúsculas y las minúsculas.
Sin embargo, no es necesario crear archivos temporales, como se sugiere en la respuesta aceptada y los comentarios, porque en primer lugar no pueden existir dos nombres de archivo que difieren solo por caso, ref.
Para mostrar esto:
$ 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
Una versión de concha de pescado:
for old in *
set new (echo $old | tr '[A-Z]' '[a-z]')
mv $old $new
end