Thread View: es.comp.os.linux.programacion
6 messages
6 total messages
Started by Manolo
Tue, 28 Feb 2006 01:56
Ayuda con Bash Script. Tratamiento de nombres de ficheros.
Author: Manolo
Date: Tue, 28 Feb 2006 01:56
Date: Tue, 28 Feb 2006 01:56
66 lines
2590 bytes
2590 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hola. Espero que la pregunta este hecha en el sitio adecuado y del modo adecuado. A ver si me explico... Estoy currandome un script para convertir ficheros .wma a .ogg utilizando 'mplayer' y 'oggenc'. Declaro esta variable: NOM=`ls *0$cont*.wma|rev|cut -c 5-|rev` el resultado es el nombre de un fichero cortando la extension y el punto, osea cortando '.wav' 'echo $NOM' devuelve algo asi: 01 Walk on Hot Coals Ahora quiero hacer un 'mv audiodump.wav $NOM.wav' pero no me lo permite porque entiende '01 Walk on Hot Coals' como si fuesen 5 ficheros distintos. La pregunta es �como puedo mover 'audiodump.wav' a '$NOM.wav' y que acepte los espacios? - -----------------------------------8<------------------------------------- #!/bin/sh clear ls *.wma --color cont=1 echo "Numero de Canciones" read canciones while [ $cont -le $canciones ] do while [ $cont -lt 10 ] do mplayer -ao pcm *0$cont*.wma NOM=`ls *0$cont*.wma|rev|cut -c 5-|rev` mv audiodump.wav $NOM.wav cont=`expr $cont + 1` done while [ $cont -le $canciones ] do mplayer -ao pcm *$cont*.wma NOM=`ls *$cont*.wma|rev|cut -c 5-|rev` mv audiodump.wav $cont.wav cont=`expr $cont + 1` done done - --------------------------------8<----------------------------------------- Esta es la parte para pasar de wma a wav. El script supongo es bastante mejorable, pero por si a alguien le interesa ojearlo... Gracias. Un saludo. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFEA61/HrWmJqF2ShcRAtdZAJ9ISBc7iwu7NP1wyKuvQSUnGo5kSQCeLIDb DuF/lfsOh0KHXP6h9/p3gi8= =pSGe -----END PGP SIGNATURE-----
Re: Ayuda con Bash Script. Tratamiento de nombres de ficheros.
Author: AnimAlf
Date: Tue, 28 Feb 2006 03:32
Date: Tue, 28 Feb 2006 03:32
72 lines
3132 bytes
3132 bytes
--=-uAiBiJfJePx5GFT8HtpY
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
El dt 28 de 02 del 2006 a les 01:56 +0000, en/na Manolo va escriure:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>=20
>=20
> Hola. Espero que la pregunta este hecha en el sitio adecuado y del modo
> adecuado. A ver si me explico...
>=20
> Estoy currandome un script para convertir ficheros .wma a .ogg
> utilizando 'mplayer' y 'oggenc'.=20
>=20
> Declaro esta variable:
>=20
> NOM=3D`ls *0$cont*.wma|rev|cut -c 5-|rev`
>=20
> el resultado es el nombre de un fichero cortando la extension y el
> punto, osea cortando '.wav'
>=20
> 'echo $NOM' devuelve algo asi:
> 01 Walk on Hot Coals
Puedes reemplazar el espacio " " por "\ "
Se utiliza lo siguiente:
${var/Patron/Reemplazo}
Sustituiria la primera coincidencia de Patr=C3=B3n con Reemplazo
Para el reemplazo global ser=C3=ADa
${var//Patron/Reemplazo}
Te quedar=C3=ADa tal que as=C3=AD
echo ${NOM// /\\ }
01\ Walk\ on\ Hot\ Coals
> Ahora quiero hacer un 'mv audiodump.wav $NOM.wav' pero no me lo permite
NOM=3D${NOM// /\\ };
mv audiodump.wav $NOM.wav;
Saludos
--=20
AnimAlf AnimAlf@engendro.sytes.net=20
http://www.tinet.cat/~acl=20
Personal Experimental WebServer: http://www.engendro.sytes.net=20
LiNUX ReGiSteRED UseR #91326=20
PublicPGPkeyID 0xB3B41215=20
Is the truth out there?=20
Coalici=C3=B3n europea contra el correo comercial no solicitado:=20
http://www.euro.cauce.org/es
--=-uAiBiJfJePx5GFT8HtpY
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada
digitalmente
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (GNU/Linux)
iQCVAwUARAPDtx535IyztBIVAQKtZQP9EmldT+C9oktqpP69I+0Rxbh0g8ndFQDS
qEc7i/JFvDQfUDwqed1qbzeQegrLJ9fQth0qkdGJh+H/EemNK20gUFbqSDxK9wBK
56261OHOhmc10yVsa/eujfCHlXR2SXfw6k8VJ/MR/xFXc3QOxzwUxG+JEcSPY/i0
INocm6/ATQE=
=Uj6Q
-----END PGP SIGNATURE-----
--=-uAiBiJfJePx5GFT8HtpY--
Re: Ayuda con Bash Script. Tratamiento de nombres de ficheros.
Author: Abelardo Tordo
Date: Tue, 28 Feb 2006 03:37
Date: Tue, 28 Feb 2006 03:37
8 lines
1239 bytes
1239 bytes
En es.comp.os.linux.programacion, Manolo <manolo@elektra.org> escribi�: > Ahora quiero hacer un 'mv audiodump.wav $NOM.wav' pero no me lo permite > porque entiende '01 Walk on Hot Coals' como si fuesen 5 ficheros > distintos. La pregunta es �como puedo mover 'audiodump.wav' a '$NOM.wav' > y que acepte los espacios? �Has probado a ponerlo entre comillas? mv audiodump.wav "$NOM.wav"
Re: Ayuda con Bash Script. Tratamiento de nombres de ficheros.
Author: J.A. Gutierrez
Date: Tue, 28 Feb 2006 08:50
Date: Tue, 28 Feb 2006 08:50
88 lines
3606 bytes
3606 bytes
Manolo <manolo@elektra.org> wrote: : -----BEGIN PGP SIGNED MESSAGE----- : NOM=`ls *0$cont*.wma|rev|cut -c 5-|rev` 1.- El ls no es necesario. En estos casos un simple "echo" (que es un "builtin") es mas rapido, sencillo y con menos efectos no previstos. NOM=`echo *0$cont*.wma|rev|cut -c 5-|rev` 2.- Para quitar la extension es mejor ser un poco menos creativo y recurrir a las ordenes hechas especificamente para ello (ademas, "rev", no es portable). NOM=`basename *0$cont*.wma .wma` : Ahora quiero hacer un 'mv audiodump.wav $NOM.wav' pero no me lo permite : porque entiende '01 Walk on Hot Coals' como si fuesen 5 ficheros : distintos. La pregunta es �como puedo mover 'audiodump.wav' a '$NOM.wav' : y que acepte los espacios? comillas dobles : - -----------------------------------8<------------------------------------- : #!/bin/sh : clear : ls *.wma --color el switch "--color" no es estandar. Mejor dejarlo por defecto, y que el usuario tenga esa opcion en su entorno si quiere. : cont=1 : echo "Numero de Canciones" : read canciones esto lo puedes hacer tu canciones=`ls -1 *wma | wc -l` : while [ $cont -le $canciones ] : do : while [ $cont -lt 10 ] : do : mplayer -ao pcm *0$cont*.wma : NOM=`ls *0$cont*.wma|rev|cut -c 5-|rev` : mv audiodump.wav $NOM.wav a mplayer le puedes decir directamente el nombre del fichero de salida mplayer -ao pcm -aofile "$NOM".wav "$NOM".wma : cont=`expr $cont + 1` : done : while [ $cont -le $canciones ] : do : mplayer -ao pcm *$cont*.wma : NOM=`ls *$cont*.wma|rev|cut -c 5-|rev` : mv audiodump.wav $cont.wav : cont=`expr $cont + 1` : done : done : - --------------------------------8<----------------------------------------- : Esta es la parte para pasar de wma a wav. El script supongo es bastante : mejorable, pero por si a alguien le interesa ojearlo... La verdad es que no entiendo muy bien la razon de ser de los bucles que haces, pero a ojo, yo diria que tu script se puede simplificar bastante (de hecho, a una sola linea): ls -1 *wma|sed 's/\(.*\)\.wma/mplayer -ao pcm -aofile \"\1.wav\" \"\1.wma\"/'|sh (ojo: no probado!. Quitar el "|sh" para previsualizar lo que se va a ejecutar) -- PGP and other useless info at \ http://webdiis.unizar.es/~spd/ \ finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Re: Ayuda con Bash Script. Tratamiento de nombres de ficheros.
Author: Manolo
Date: Wed, 01 Mar 2006 00:44
Date: Wed, 01 Mar 2006 00:44
75 lines
3410 bytes
3410 bytes
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hola. El Tue, 28 Feb 2006 08:50:49 +0000 (UTC), J.A. Gutierrez... => NOM=`echo *0$cont*.wma|rev|cut -c 5-|rev` => para ello (ademas, "rev", no es portable). => NOM=`basename *0$cont*.wma .wma` Vale. Gracias por esta informacion. Pero reconoce que mi juego con 'rev' y 'cut' te ha gustado :-D => : y que acepte los espacios? => comillas dobles Conio... parece que las comillas eran la respuesta :-) => : cont=1 => : echo "Numero de Canciones" => : read canciones => esto lo puedes hacer tu => canciones=`ls -1 *wma | wc -l` �Bien! Esto sabia que se podia hacer de otro modo pero no me habia puesto a investigar. => a mplayer le puedes decir directamente el nombre del => fichero de salida => mplayer -ao pcm -aofile "$NOM".wav "$NOM".wma => La verdad es que no entiendo muy bien la razon de ser de => los bucles que haces, pero a ojo, yo diria que tu script se Los dos bucles anidados son para tratar de distinto modo a los ficheros con numero <10 y >=10. Normalmente las canciones van numeradas de forma que los numeros <10 llevan el cero delante tal que: 'cancion01.wma' Entonces no sabia bien como decir que se procese la cancion 01 indicando que el cero esta ahi. '01, 02,..., 09, 10...' y no '1, 2, 3...' Pues un bucle para <10 y otro para >=10 (supongo que tiene que haber forma mas racional de hacerlo). Pero se me acaba de ocurrir que a�adiendo una variable que introduzca o no el cero se podria hacer. Script reescrito a�adiendo actualizaciones: - ----------------------------8<------------------------- canciones=`ls -1 *wma | wc -l` cero=0 cont=1 while [ $cont -le $canciones ] do if [ $cont -gt 9 ] then cero="" fi NOM=`basename *$cero$cont*.wma .wma` mplayer -ao pcm:file="$NOM".wav "$NOM".wma cont=`expr $cont + 1` done - --------------------------------------8<--------------- => ls -1 *wma|sed 's/\(.*\)\.wma/mplayer -ao pcm -aofile \"\1.wav\" \"\1.wma\"/'|sh �uffffff! Creo que tengo que hacer un 'man sed' :-) Un saludo. Gracias a todos. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFEBO34HrWmJqF2ShcRAqL2AJ9CDHPG7r0OuBrLDaqAcdAZ1JPjRwCdGufc OOIf4ktxWvk6nh47RHA88cA= =40XX -----END PGP SIGNATURE-----
Re: Ayuda con Bash Script. Tratamiento de nombres de ficheros.
Author: J.A. Gutierrez
Date: Wed, 01 Mar 2006 08:51
Date: Wed, 01 Mar 2006 08:51
68 lines
3644 bytes
3644 bytes
Manolo <manolo@elektra.org> wrote:
: El Tue, 28 Feb 2006 08:50:49 +0000 (UTC),
: J.A. Gutierrez...
: => NOM=`echo *0$cont*.wma|rev|cut -c 5-|rev`
: => para ello (ademas, "rev", no es portable).
: => NOM=`basename *0$cont*.wma .wma`
: Vale. Gracias por esta informacion. Pero reconoce que mi juego con 'rev'
: y 'cut' te ha gustado :-D
desde luego, creativo si que es.
Pero incluso usando cut, no necesitas usar rev:
$ echo foobar.wma | cut -d. -f1
foobar
Hay muchas otras alternativas para quedarse con el nombre
del fichero sin extension, p.e.:
echo foobar.wma | sed 's/\.[^.]*$//'
expr foobar.wma : '\(\([^\.]*\)*\)\(\..*\)'
: Los dos bucles anidados son para tratar de distinto modo a los ficheros
: con numero <10 y >=10. Normalmente las canciones van numeradas de forma
: que los numeros <10 llevan el cero delante tal que: 'cancion01.wma'
entiendo
: Entonces no sabia bien como decir que se procese la cancion 01 indicando
: que el cero esta ahi. '01, 02,..., 09, 10...' y no '1, 2, 3...' Pues un
: bucle para <10 y otro para >=10 (supongo que tiene que haber forma mas
: racional de hacerlo). Pero se me acaba de ocurrir que a�adiendo una
: variable que introduzca o no el cero se podria hacer. Script reescrito
: a�adiendo actualizaciones:
pero te falla si tienes mas de 20 cortes.
Para esos casos lo mejor es extraer la cifra como numero
y expresarlo formateado.
Para ello se pueden usar desde el manejo de aritmetica del
shell o, por aquello de la portabilidad, awk:
N=3
echo $N | awk '{printf("%0.2d\n",$0)}'
Pero de todas formas, para esas cosas, lo que yo haria en
primer lugar es renombrar todos los ficheros para que se
ajusten al estandar elegido.
Ver p.e. <http://giga.cps.unizar.es/~spd/src/audio/renamemp3.sh>
: => ls -1 *wma|sed 's/\(.*\)\.wma/mplayer -ao pcm -aofile \"\1.wav\" \"\1.wma\"/'|sh
: �uffffff! Creo que tengo que hacer un 'man sed' :-)
Hace algun tiempo alguien que suele escribir en este grupo
mando un tutorial bastante completo... veamos...
<http://www.elotrolado.net/showthread.php?s=&threadid=269086>
--
PGP and other useless info at \
http://webdiis.unizar.es/~spd/ \
finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads