Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 3 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Sab Dic 11, 2010 8:15 pm
Mensajes: 2

Nota Publicado: Sab Dic 11, 2010 8:22 pm 
Arriba  
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:
#!/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.

 Perfil Email  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Dom Dic 12, 2010 5:28 am 
Arriba  
Lo que pasa es que tienes un problema con los espacios en blanco. Lo que estás haciendo es:
Código:
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:
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" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Sab Dic 11, 2010 8:15 pm
Mensajes: 2

Nota Publicado: Dom Dic 12, 2010 7:01 am 
Arriba  
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.

 Perfil Email  
Mostrar mensajes previos:  Ordenar por  
 [ 3 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO