Convertir nombres de archivo y directorio

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
FCHip
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Dom Dic 12, 2010 4:15 am

Convertir nombres de archivo y directorio

Mensaje por FCHip » Dom Dic 12, 2010 4:22 am

Muy buenas a todos,
Estoy probando un script que renombre los nombres de archivo y directorio de la ruta actual en minúsculas si están en mayúscula y que sustituya también los espacios por guiones bajos.
Se que es un tema un poco manido y he buscado mucha información pero sigo sin comprender porqué no funciona esto.

Aquí os pongo mi código de prueba, que no se por qué no funciona...

Código: Seleccionar todo

#!/bin/bash
#Script que convierte los nombres de archivos y directorios que estén en mayúsculas y espacios a minúsculas y guiones bajos.
#Se tiene que ejecutar dentro de la ruta de destino
for var in *; do
        nombre=$var
        nuevonombre=`echo $var | tr 'A-Z' 'a-z' | tr ' ' '_'`
        #echo "$nombre --> $nuevonombre"
        mv $nombre $nuevonombre
done
echo ""
echo "Conversión finalizada."
Si descomentáis la linea de echo los nombres salen bien pero luego al hacer el 'mv' me da muchos errores como este:
mv: el destino, «esto_es_en_blanco.txt», no es un directorio (ya, es un fichero pero mv renombra ficheros también!!!)
El mv ejecutado a mano en la consola con exactamente la misma sintásis funciona bien.

¿Qué puede estar pasando?
Muchas gracias por vuestra ayuda.
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Convertir nombres de archivo y directorio

Mensaje por akodo » Dom Dic 12, 2010 1:28 pm

Lo que pasa es que tienes un problema con los espacios en blanco. Lo que estás haciendo es:

Código: Seleccionar todo

mv esto es en blanco.txt esto_es_en_blanco.txt
con lo que el comando mv te toma como primer parámetro "esto", el segundo "es", el tercero "un", etc.
El comportamiento de mv cuando se le pasa más parámetros que 2 (si no me confundo) es que te considera el último como un directorio donde debe mover el resto de parámetros. Por eso te da ese error.

La solución creo que es la siguiente:

Código: Seleccionar todo

mv "$nombre" "$nuevonombre"
con eso el contenido de la variable nombre te lo considerará como un único parámetro a pesar de que haya espacios en el nombre.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
FCHip
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Dom Dic 12, 2010 4:15 am

Re: Convertir nombres de archivo y directorio

Mensaje por FCHip » Dom Dic 12, 2010 3:01 pm

Gracias por tu ayuda, exactamente era eso! me lo imaginé desde el principio así que escapé las " en el primer argumento del mv pensando que así saldría (en el echo si lo hacía) pero en el mv no :?
Como lo has puesto sale bien.
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje