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.