[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bash



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


Reply to: