El jue, 14-12-2006 a las 01:33 +0100, Jaume Martin Claramonte escribió: > Angel Claudio Alvarez escribió: > > El mié, 13-12-2006 a las 23:43 +0100, Jaume Martin Claramonte escribió: > >> Sergio Vernis escribió: > >>> En Tue, 12 Dec 2006 23:34:46 +0100 > >>> Jaume Martin Claramonte <jaumartin@gmail.com> escribió: > >>> > >>>> Hola, una vez escuche de un profesor de entornos de programación que en > >>>> bash existía una especie de listas, no se si es del todo cierto, pero la > >>>> verdad es que me gustaría saber si lo es porque ahora mismo me vendría > >>>> de lujo, les explico lo que estoy haciendo y haber si hay alguna otra > >>>> solución. > >>>> llamo al script con una serie de nombres de archivos los cuales > >>>> contienen espacios, bien pues los sustituyo por _ con el comando tr pero > >>>> claro una vez cambiados los nombres ya no coinciden con $* y no puedo > >>>> usar este comodín y no se como hacer referencia a los archivos una vez > >>>> cambiado su nombre. > >>>> > >>>> si quieren un trozo de código pidanmelo y se lo pasare encantado > >> Miren no me ha funcionado ningunas de las soluciones que me han dado así > >> que voy a poner el trozo de código problemático. > >> > >> # Este código es el que cambia el nombre ha los archivos, este código se > >> # ejecuta antes del próximo trozo de código. > >> for i in $* > >> do > >> mv "$i" `echo $i | tr ' ' '_'` > >> done > >> > >> # Se ejecuta después que el código anterior > >> for nom in $* > >> do > >> nom=../`echo $nom | tr ' ' '_'` # No hace lo que tendría que hacer > >> echo "$nom" > >> ... > >> > >> > >> sin embargo cuando hago en echo "$nom" solo muestra ../archivos-*, vamos > >> que solo muestra el parámetro que yo le paso al programa y no muestra > >> ../Nomre_sin_espacios y no se porque hace esto. > >> > > > > proba pasando la lista de archivos entre comillas > > ej: > > script "archi*.txt" > > Ya hago eso. > mirad un ejemplo (creo que con este se entenderá). > > nombre del archivo 1: capitulo-1 de la serie.avi > nombre del archivo 2: capitulo-2 de la serie.avi > nombre del archivo 3: capitulo-3 de la serie.avi > nombre del script: dvd.sh > funciones dentro del script: > * CambiarNombre ---> cambia en nombre a los archivos (elimina los > espacios en blanco) > * RedistribuyeArchivos ---> separa los archivos en carpetas y en > cada carpeta no puede haber mas de cierto tamaño sumando los > tamaños de los archivos, para luego grabar cada carpeta en un cd/dvd > por separado > > Llamada al script. > $ dvd.sh "capitulo-*" > > pues bien en la función RedistribuyeArchivos que se ejecuta despues de > CambiarNombre, llega un punto en la función RedistribuyeArchivos que > quiero hacer esto: > > for nom in "$@" # esto es lo que me ha aconsejado Cesar > do > nom=../`echo $nom | tr ' ' '_'` # esto no se hace correctamente > echo "$nom" # imprime ../capitulo-* cuando debería ser: # > ../capitulo-1_de_la_serie.avi > ..... > > No se creo que ahora ha quedado mas claro. > > Saludos, y gracias por la ayuda. sin embargo a mi me funciona esto --------------------------------- #!/bin/sh for i in $* do mv "$i" `echo $i | tr ' ' '_'` done echo $* -------------------------------- Antes creo los archivos con espacio: for a in 1 2 3 4 5; do touch "archivo $a.txt"; done Ejecuto el script y la salida que obtengo es: angel@averno:~/tmp$ sh prueba "arch*.txt" archivo_1.txt archivo_2.txt archivo_3.txt archivo_4.txt archivo_5.txt que es lo que supongo que queres que salga > > >> Saludos. > >> -- > >> Si se encuentra bien, no se preocupe. Se le pasará. [POSTULADO DE BOLING.] > >> > >> > > > -- > Si se encuentra bien, no se preocupe. Se le pasará. [POSTULADO DE BOLING.] > > -- Angel Claudio Alvarez Usuario Linux Registrado 143466 GPG Public Key en http://pgp.mit.edu key fingerprint = 3AED D95B 7E2D E954 61C8 F505 1884 473C FC8C 8AC4
Attachment:
signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente