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