Tengo, por ejemplo, TREE.wav, ONE.WAV. Quiero cambiarle el nombre a tree.wav, one.wav. ¿Cómo cambio el nombre de todos los archivos a minúsculas?
Tengo, por ejemplo, TREE.wav, ONE.WAV. Quiero cambiarle el nombre a tree.wav, one.wav. ¿Cómo cambio el nombre de todos los archivos a minúsculas?
Respuestas:
Si se siente cómodo con la terminal:
cd
y luego arrastre y suelte la carpeta que contiene los archivos a renombrar en la ventana.ls
y presione enter.Pega este código y presiona enter:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
y presione Intro nuevamente.(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).
foo.txt
y FOO.TXT
, esto podría golpear a uno de ellos.
mv "$f" "${f,,}"
odeclare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
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 hay necesidad de 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