🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#1229
Author: Manolo
Date: Tue, 28 Feb 2006 01:56
66 lines
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.
#1230
Author: AnimAlf
Date: Tue, 28 Feb 2006 03:32
72 lines
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.
#1231
Author: Abelardo Tordo
Date: Tue, 28 Feb 2006 03:37
8 lines
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.
#1232
Author: J.A. Gutierrez
Date: Tue, 28 Feb 2006 08:50
88 lines
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.
#1234
Author: Manolo
Date: Wed, 01 Mar 2006 00:44
75 lines
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.
#1236
Author: J.A. Gutierrez
Date: Wed, 01 Mar 2006 08:51
68 lines
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