¿Se siente cómodo con una solución Terminal / shell? ¿O quieres que el código C / Objective-C logre eso?
La solución terminal estará bien.
Voloda2
3
Creo que esto debería reabrirse. el código de terminal también es código
Danield
1
Esta debería ser una pregunta válida en stackoverflow. Esto también es código.
adev
Respuestas:
371
Si se siente cómodo con la terminal:
Abra Terminal.app, escriba cdy luego arrastre y suelte la carpeta que contiene los archivos a renombrar en la ventana.
Para confirmar que está en el directorio correcto, escriba lsy 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
Para confirmar que todos sus archivos están en minúsculas, escriba lsy 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).
Probé todos estos comandos, obtengo "mv: 'PPP.txt' y 'ppp.txt' son el mismo archivo" y no minúscula mi archivo ... ¿alguna idea? ¿Es porque está en el mismo directorio?
lorless
1
user2066039: Debe ser algo reciente en Mac, porque la mayoría de las respuestas anteriores a un año no lo tienen en cuenta. Logré la tarea usando una extensión intermedia como 'jpg1'. Entonces, JPG -> jpg1 -> jpg. Espero que ayude.
Joyce
14
Los usuarios de OS X deben cambiar el nombre de cada archivo a un nombre temporal primero debido al sistema de archivos que no distingue entre mayúsculas y minúsculas, por ejemplo: for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
John Whitley
10
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
Sí, pero su ejemplo sugiere que puede poner nombres de archivo en minúsculas usando 'mv X x'. Así que solo lo comenté.
cpaludan
mojave 10.14.5: # touch X x # ls -la total 0 -rw-r - r-- 1 root root 0 24 de junio 15:19 X # mv X x mv: 'X' y 'x' son iguales file # ls -la -rw-r - r-- 1 root root 0 24 de junio 15:19 X
cpaludan
Perdón por el formato de mierda. Así que no fue amable conmigo allí.
cpaludan
1
Y mi error, estaba en un ssh en mi frambuesa en una unidad compartida (formateada con hfsplus), ahí no funciona. Pero localmente en mi mac lo hace.
cpaludan
para yo en *; do j = $ (tr '[: superior:]' '[: inferior:]' <<< "$ i"); mv "$ i" "$ j"; trabajó para mí en catalina. Gracias.
Sinan Eldem
2
Una versión de concha de pescado:
for old in*set new (echo $old | tr '[A-Z]''[a-z]')
mv $old $new
end
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:
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).
fuente
foo.txt
yFOO.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):
También debe manejar espacios en los nombres de archivo (cualquier sistema operativo):
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):
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:
fuente
Una versión de concha de pescado:
fuente