Convertir las mayúsculas en minúsculas de los nombres de archivos

Prueba con find (comando Linux)

En muchas ocasiones es preferible tener los nombres de los ficheros y directorios en minúscula. Ir uno a uno renombrando es un trabajo muy arduo. Especialmente cuando existen cientos o miles de ficheros, el trabajo se complica más y se hace difícil de pasar a mano. Pero eso no quiere decir que sea imposible o que no haya métodos para hacerlo de una forma totalmente rápida y automatizada.

Pero más allá de la pura estética o de las preferencias de cada usuario, a veces se trata de temas técnicos, ya que algunas apps no pueden trabajar con ciertos nombres en mayúscula y necesitan ser convertidos. Cuando te topas con una de estas apps, quizás llevas tiempo acumulando ficheros con nombres de todo tipo, y volver a atrás se hace complicado. Pero no te preocupes, tiene una sencilla solución como te enseño en este tutorial…

Convertir mayúsculas en minúsculas

Comando para pasar de mayúsculas a minúsculas

Lo primero que debes saber es que el siguiente comando convertirá todas las mayúsculas en minúsculas, incluido si hay subdirectorios dentro de dicho directorio. Así que si no quieres que todas se trasformen en minúsculas, hazlo solo en el directorio específico o te lo convertirá todo. Esto me parece importante para que luego no tengas problemas y se conviertan nombres que no querías que se pasasen a minúsculas.

Por otro lado, necesitas tener instalado el programa rename. Si no lo tienes instalado usa el gestor de paquetes de tu distro para instalarlo fácilmente. No obstante, por lo general deberías tenerlo instalado, así que no será necesario su instalación en todos los casos. Ésta herramienta te va a servir para poder modificar varios nombres a la vez, en vez de usar el típico mv para modificar el nombre de uno en uno…

Otra de las cosas que necesitas saber antes de ponerse manos a la obra es que si al convertir de mayúsculas en minúsculas se topa con un nombre igual, entonces no se convertirá. Ya sabes que Linux tiene case-sensitive en sus FS, así que distingue entre mayúsculas y minúsculas. Eso quiere decir que si tienes un fichero llamado Hola2 y HOLA2, el sistema los diferencia. Pero, claro…, al pasar a minúsculas ambos se llamarían hola2 y eso no es posible. Por tanto, lanzará un mensaje de error y no lo transforma.

Después de eso ya tienes todo lo que necesitas saber y podemos comenzar a transformar los nombres de mayúsculas a minúsculas. El comando genérico sería el siguiente, y puedes modificarlo para apuntar al directorio que quieras:

<br data-mce-bogus="1">

<em>find &lt;nombre_directorio&gt; -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;</em>

Debes sustituir <nombre_directorio> por el nombre del directorio o el path del directorio que quieras pasar a minúsculas. Por ejemplo, como el ejemplo que te muestro en la imagen que es Prueba, pero también podría ser cualquier otro. Para los más novatos, decir que con path me refiero a la ruta, cuando no se encuentra directamente dentro del directorio donde te encuentras actualmente. Por ejemplo, si estás en ~/ pero quieres actuar sobre /home/usuario/Descargas.

Convertirlo en script

Para facilitar la conversión de mayúsculas y minúsculas, puedes crear un script que lo haga por ti y no tendrás que introducir el anterior comando cada vez que necesites una conversión. Esto es muy útil para aquellos que están constantemente pasando nombres. Además, si lo metes dentro de alguna de las rutas de la variable de entorno $PATH, podrás ejecutarlo solo con invocar su nombre, sin tener que tenerlo en el mismo directorio en el que te encuentras trabajando o especificar la ruta completa…

Los pasos que debes seguir para crear el script conversor son:

  • Lo primero es ir al directorio /bin para incluir allí el script y así usarlo como cualquier otro comando, simplemente invocando su nombre desde el terminal.
<br data-mce-bogus="1">

cd ~/bin<br data-mce-bogus="1">

  • Luego crea con nano, o con tu editor de texto favorito, el fichero con el script y llámalo como prefieras. Yo lo voy a llamar mayutominu:

sudo nano mayutominu.sh

  • Dentro de nano debes pegar el siguiente texto para el código de este script de bash:
</pre><pre>#!/bin/bash
if [ -z $1 ];then
echo "Uso :$(basename $0) parent-directory"
exit 1
fi

all="$(find $1 -depth)"

for name in ${all}; do
new_name="$(dirname "${name}")/$(basename "${name}" | tr '[A-Z]' '[a-z]')"
if [ "${name}" != "${new_name}" ]; then
[ ! -e "${new_name}" ] &amp;&amp; mv -T "${name}" "${new_name}"; echo "${name} was renamed to ${new_name}" || echo "${name} wasn't renamed!"
fi

done
exit 0</pre><pre>
  • Ahora guarda el fichero usando la combinación de teclas Ctrl+O y sal con Ctrl+X. Ya tienes tu fichero mayutominu.sh creado con el script, lo siguiente es darle permisos de ejecución:
sudo chmod +x mayutominu.sh
  • Finalmente ya lo tienes listo para usar. ¿Cómo se hace? Pues siguiendo con el mismo ejemplo del apartado anterior, si quisieras cambiar de mayúsculas a minúsculas los nombres del directorio Prueba, puedes hacer lo siguiente:
mayutominu Prueba
  • Ya sabes, si necesitas especificar la ruta completa, o path, también puedes, si el directorio no se encuentra en la posición actual. Por ejemplo:
mayutominu /home/usuario/Descargas

Espero que te haya servido de ayuda, ya sabes que cualquier duda o sugerencia, puedes dejar tus comentarios


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   yo dijo

    En debian me indica esto:
    -bash: syntax error near unexpected token `newline

    find </home/STORAGE/TMP2/> -depth | xargs -n 1 rename -v ‘s/(.*)\/([^\/]*)/$1\/\L$2/’ {} \;