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

Re: Bash



Angel Claudio Alvarez escribió:
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

Si es lo que quiero que salga pero eso solo es para cambiar el nombre y si hago la llamada con "" eso que tu dices también me funciona pero después yo me quiero referir a los archivos que ya han cambiado de nombre porlotanto ya no se encuentran en $* porque en la llamada del script conetian espacio, de todas formas ya esta solucionado gracias ha todos.

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.]




--
Si se encuentra bien, no se preocupe. Se le pasará. [POSTULADO DE BOLING.]



Reply to: