Foros del Web » Administración de Sistemas » Unix / Linux »

Script para copiar CDs

Estas en el tema de Script para copiar CDs en el foro de Unix / Linux en Foros del Web. Hola a todos. Os presento mi última creación . Es un script que usa cdrdao para copiar CDs. Así por lo menos le ahorro a ...
  #1 (permalink)  
Antiguo 27/11/2002, 15:49
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 4 meses
Puntos: 0
Script para copiar CDs

Hola a todos.

Os presento mi última creación . Es un script que usa cdrdao para copiar CDs. Así por lo menos le ahorro a alguien algún posavasos y unos minutos de lectura de páginas man

Aportaciones / sugerencias / correcciones bienvenidas:

Código:
#!/bin/bash

####
# copiacd
# 'Front-end' para copiar CDs usando cdrdao
# (C) Ricardo Cervera Navarro. <[email protected]>
# Under GPL License v. 2
####

# CONFIGURACIÓN
#
GRABADORA=0,1,0
LECTOR=0,0,0
MODO_LECUTRA_AUDIO=0 # 0 a 3 según el nivel de corrección.
                     # Cuanto más alto sea el valor, mayor corrección,
                     # pero lectura _mucho_ más lenta.

# FUNCIONES
#
function leer_audio ()
{
        cdrdao read-cd --device "$LECTOR" --driver generic-mmc \
        --paranoia-mode "$MODO_LECTURA_AUDIO" --datafile ./image_audio ./image_audio.toc
}

function tostar_audio ()
{
        VELOCIDAD=$1
        cdrdao write --device "$GRABADORA" --driver generic-mmc \
        --eject --speed "$VELOCIDAD" ./image_audio.toc
}

function leer_psx ()
{
        cdrdao read-cd --read-raw --device "$LECTOR" --driver generic-mmc-raw \
        --datafile ./image_psx.bin ./image_psx.toc
}

function tostar_psx ()
{
        VELOCIDAD=$1
        cdrdao write --eject --speed "$VELOCIDAD" --device "$GRABADORA" \
        --driver generic-mmc ./image_psx.toc
}

function leer_datos ()
{
        cdrdao read-cd --device "$LECTOR" --driver generic-mmc \
        --datafile ./image_datos ./image_datos.toc
}

function tostar_datos ()
{
        VELOCIDAD=$1
        cdrdao write --eject --speed "$VELOCIDAD" --device "$GRABADORA" \
        --driver generic-mmc ./image_datos.toc
}

##########

function uso ()
{
        echo "copiacd -- Script que copia CDs usando cdrdao"
        echo "-------"
        echo "copiacd necesita al menos un argumento"
        echo "para funcionar, dependiendo del modo."
        echo " "
        echo "Uso: copiacd <modo> [<velocidad>]"
        echo " "
        echo "Los modos posibles son:"
        echo "-datos_leer"
        echo "-datos_tostar <velocidad>"
        echo "-datos <velocidad>"
        echo "-psx_leer"
        echo "-psx_tostar <velocidad>"
        echo "-psx <velocidad>"
        echo "-audio_leer"
        echo "-audio_tostar <velocidad>"
        echo "-audio <velocidad>"
        echo " "
        echo "Las opciones *_leer, leen el CD, dejando la imagen"
        echo "y el fichero TOC en el directorio actual."
        echo " "
        echo "Las opciones *_tostar, graban la imagen del directorio"
        echo "actual a un CD en la grabadora a velocidad igual"
        echo "a <velocidad>"
        echo " "
        echo "Las opciones sin _leer ni _tostar, primero leen el disco"
        echo "y después lo graban a velocidad igual a <velocidad>."
        echo "Cuando termina el proceso borran los archivos de imagen,"
        echo "al contrario que las opciones *_tostar, las cuales nos"
        echo "permiten crear varias copias con una sola lectura."
        echo " "
        echo "(C) Ricardo Cervera Navarro. <[email protected]>"
        echo "Under GPL License v. 2"
        echo " "
}

# EJECUCIÓN
#
case $1 in
        -audio_leer)
                leer_audio
                ;;

        -audio_tostar)
                if [ $# -ge 2 ]; then
                        tostar_audio $2
                else
                        uso
                fi
                ;;

        -audio)
                if [ $# -ge 2 ]; then
                        leer_audio
                        tostar_audio $2
                        rm -f ./image_audio ./image_audio.toc
                else
                        uso
                fi
                ;;

        -psx_leer)
                leer_psx
                ;;

        -psx_tostar)
                if [ $# -ge 2 ]; then
                        tostar_psx $2
                else
                        uso
                fi
                ;;

        -psx)
                if [ $# -ge 2 ]; then
                        leer_psx
                        tostar_psx $2
                        rm -f ./image_psx.bin ./image_psx.toc
                else
                        uso
                fi
                ;;

        -datos_leer)
                leer_datos
                ;;

        -datos_tostar)
                if [ $# -ge 2 ]; then
                        tostar_datos $2
                else
                        uso
                fi
                ;;

        -datos)
                if [ $# -ge 2 ]; then
                        leer_datos
                        tostar_datos $2
                        rm -f ./image_datos ./image_datos.toc
                else
                        uso
                fi
                ;;

        *)
                uso
                ;;

esac

Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #2 (permalink)  
Antiguo 28/11/2002, 05:55
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 6 meses
Puntos: 5
Muchisimas gracisa lical, en cuanto llega a casa lo pruebo, sk nucna tube una copiadora jeje y ahora en el pc nuevo la puse y no sabia como tostar cds ... tengo el gnometoaster o algo asi grafico pero weno si hay algo via consola jeje mejor k mejor :P a ver si hago alguna cosita y te comento :P
__________________
Usuario registrado de Linux #288725
  #3 (permalink)  
Antiguo 28/11/2002, 08:36
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 4 meses
Puntos: 0
epplestun, si nunca has tratado con las grabadoras en Linux, tienes que "hacer" que sean SCSI. Esto, si tienes los módulos adecuados en el kernel y usas GRUB, puedes poner en la línea de Linux:

hdX=ide-scsi

Con el lector y con la grabadora.

Luego puedes determinar qué dispositivo es cada uno haciendo como root:

cdrecord -scanbus


Para LiLO creo que era ide-scsi=hdX, pero no estoy seguro :(


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #4 (permalink)  
Antiguo 28/11/2002, 17:42
Avatar de hrxnet  
Fecha de Ingreso: julio-2002
Ubicación: Sto. Dgo. RD
Mensajes: 516
Antigüedad: 21 años, 9 meses
Puntos: 0
Me parece muy bueno tu aporte perfecto diria yo, solo te falta hacerte como una listica de los pasos basicos para usar tu script luego que ya lo tenemos en ejecutable y todo eso, no lo mires a mal pero recuerda que muchos nos perdemos en estas cositas tan simple ;) Gracias por compartir.
  #5 (permalink)  
Antiguo 29/11/2002, 09:21
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 4 meses
Puntos: 0
Hola.

Vaya, han puesto mi post en categoría de "importante" Mooola

Veamos, escribe copiacd y te saldrá lo que hay en la función "uso". Creo que lo describe perfectamente, aunque te pondré algún ejemplo:

-Si quiero copiar un CD de audio 3 veces, haría lo siguiente:

Me situaría en un directorio donde tuviera espacio suficiente, y haría:

copiacd -audio_leer

Y luego, tres veces:

copiacd -audio_tostar <velocidad>

Luego borraría la imagen:

rm -f ./image_audio ./image_audio.toc

En cambio, si quiero copiar un cd de PSX una sola vez, haría:

copiacd -psx <velocidad>

Lo grabaría, e inmediatamente te borraría los archivos de imagen. Es obvio que tienes que "configurar" las variables LECTOR y GRABADORA apuntando a los ids SCSI que el kernel asgina a tus dispositivos, para ello tienen que ser SCSI o emulados a SCSI como dije a epplestun.


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #6 (permalink)  
Antiguo 22/12/2002, 04:24
 
Fecha de Ingreso: septiembre-2002
Ubicación: México D.F.
Mensajes: 86
Antigüedad: 21 años, 7 meses
Puntos: 0
Lical, acabo de incluir tu script en la sección de programación en Linux, de las faqs del web, grácias.
__________________
Dí no a la piratería, utiliza software libre.
http://www.fsf.org/home.es.html
  #7 (permalink)  
Antiguo 03/01/2003, 09:17
 
Fecha de Ingreso: diciembre-2002
Mensajes: 46
Antigüedad: 21 años, 4 meses
Puntos: 0
Exclamación

Hola Lical


Es muy interesante tu scrip y me gustaria echarlo a andar usarlo solo por un detalle, no lo he podido hacer, no se como hacerlo ; mi gramadora es una sansumg r/rw sw-240B ¿servira para esta grabadora de cd´s?, deme una guía de como hacerlo, please......


Atentamente


yonnymen
  #8 (permalink)  
Antiguo 03/01/2003, 14:21
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 4 meses
Puntos: 0
Supongo que servirá, no sé por qué no iba a servir

Vamos por partes, está descrito en muchos sitios, pero comienza por escribir como root

cdrecord -scanbus

y contarnos qué te devuelve.


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #9 (permalink)  
Antiguo 14/01/2003, 15:46
Avatar de Ferdy
Colaborador
 
Fecha de Ingreso: junio-2001
Ubicación: España
Mensajes: 1.430
Antigüedad: 22 años, 11 meses
Puntos: 0
He creado un pequeño parche que añade la opción de quemar una ISO además de hacer unas pequeñas comprobaciones sobre el binario de cdrdao (y cdrecord)

Código:
--- copiacd	2002-12-13 16:05:03.000000000 +0100
+++ copiacd_modif	2003-01-14 22:28:19.000000000 +0100
@@ -15,8 +15,41 @@
                      # Cuanto más alto sea el valor, mayor corrección,
                      # pero lectura _mucho_ más lenta.
 
+# Asignamos valores genericos si no fueron ajustadas las variables de entorno
+CDRDAO=${CDRDAO:=`which cdrdao`} # Path completo al binario cdrdao
+CDRECORD=${CDRECORD:=`which cdrecord`} # Path completo al binario cdrecord
+
 # FUNCIONES
 #
+function check ()
+{
+	# Comprobamos que existen los ejecutables
+	if [ -x $CDRDAO ]; then
+		echo "Usando como binario de cdrdao: $CDRDAO" 
+	else
+		echo "--(!)-- No se ha encontrado el binario de cdrdao " \
+			"   ajuste la variable CDRDAO"
+		exit
+	fi
+
+	if [ -x $CDRECORD ]; then
+		echo "Usando como binario de cdrecord: $CDRECORD"
+	else
+		echo "--(!)-- No se ha encontado el binario de cdrecord " \
+			"   ajuste la variable CDRECORD"
+		exit
+	fi
+}
+
+
+function iso ()
+{
+	VELOCIDAD=$1
+	IMAGEN=$2
+	# No se si me dejo alguna opción como -fix o algo asi
+	$CDRECORD dev=$GRABADORA speed=$VELOCIDAD -eject $IMAGEN
+}
+
 function leer_audio ()
 {
         cdrdao read-cd --device "$LECTOR" --driver generic-mmc \
@@ -77,6 +110,7 @@
         echo "-audio_leer"
         echo "-audio_tostar <velocidad>"
         echo "-audio <velocidad>"
+	echo "-iso <velocidad> <imagen> (TESTING)"
         echo " "
         echo "Las opciones *_leer, leen el CD, dejando la imagen"
         echo "y el fichero TOC en el directorio actual."
@@ -84,6 +118,8 @@
         echo "Las opciones *_tostar, graban la imagen del directorio"
         echo "actual a un CD en la grabadora a velocidad igual"
         echo "a <velocidad>"
+	echo " "
+	echo "La opción iso copia imagen .iso <imagen> a <velocidad>"
         echo " "
         echo "Las opciones sin _leer ni _tostar, primero leen el disco"
         echo "y después lo graban a velocidad igual a <velocidad>."
@@ -98,6 +134,10 @@
 
 # EJECUCIÓN
 #
+
+# Comprobamos que está todo lo que necesitamos
+check
+
 case $1 in
         -audio_leer)
                 leer_audio
Salu2.Ferdy
__________________
Born to be free
Por una sociedad del conocimiento libre
  #10 (permalink)  
Antiguo 11/08/2003, 11:53
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Cuando hago:

cdrecord -scanbus

me da los datos de la grabadora q es 0,0,0 pero ya esta tengo un lector de cds y un dvd, pero no me los enseña, como puedo saber sus valores?
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #11 (permalink)  
Antiguo 12/08/2003, 17:35
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 4 meses
Puntos: 0
Eso es que no los está emulando como SCSI. Necesitas pasarle al cargador de arranque:

hdb=ide-scsi hdc=ide-scsi

Suponiendo que hdb y hdc son tu lector y tu grabadora por ejemplo. Si tu cargador de arranque es GRUB, podrás editar el fichero /boot/grub/menu.lst. Si es LILO, el fichero es /etc/lilo.conf, pero no recuerdo como se especificaba esto para LILO. Sobre los nombramientos de dispositivos:

http://www.zonasiete.org/manual/mult...tml#chap01-3-7


Un saludo,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico
  #12 (permalink)  
Antiguo 24/10/2003, 19:51
 
Fecha de Ingreso: octubre-2003
Mensajes: 22
Antigüedad: 20 años, 6 meses
Puntos: 0
Hola...quiero continuar una sesion antes comenzada con el K3b de Suse 8.2 y a la hora de grabar me aparece el siguiente error: Cue sheet not accepted. Try setting the first pregap to 0.
ERROR: Driver does not accept any cue sheet variant. Yo uso el driver generico de cdrdao.

QUE PUEDO HACER!!!
__________________
M!GU3L

El que sabe, sabe...
  #13 (permalink)  
Antiguo 10/06/2004, 11:27
 
Fecha de Ingreso: junio-2004
Ubicación: Valencia (españa)
Mensajes: 6
Antigüedad: 19 años, 10 meses
Puntos: 0
realmente bueno ...
  #14 (permalink)  
Antiguo 11/06/2004, 10:17
 
Fecha de Ingreso: junio-2004
Mensajes: 1
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola amigos, soy nuevo en Linux, el otro dia estuve tratando de instalar Linux RedHat 9.0 en mi computadora y bueno solo llegue hasta el cuadro donde me pedia seleccionar el idioma, cuando quise seguir aparecio un mensaje el cual decia que no reconoce el CD y ya no pude seguir. Como puedo hacer, a que se debe ese mensaje.
Otra cosa mas la unidad donde voy a instalar necesita tener un formato en especial o se instala tambien en FAT32.

Última edición por criosc; 21/06/2004 a las 10:34
  #15 (permalink)  
Antiguo 28/06/2004, 06:07
 
Fecha de Ingreso: diciembre-2001
Ubicación: minime$
Mensajes: 1.673
Antigüedad: 22 años, 4 meses
Puntos: 1
¡Dios mio! el nivel de moderación en estos foros esta bajo, bajo.


Cita:
Iniciado por criosc
Hola amigos, soy nuevo en Linux, el otro dia estuve tratando de instalar Linux RedHat 9.0 en mi computadora y bueno solo llegue hasta el cuadro donde me pedia seleccionar el idioma, cuando quise seguir aparecio un mensaje el cual decia que no reconoce el CD y ya no pude seguir. Como puedo hacer, a que se debe ese mensaje.
Otra cosa mas la unidad donde voy a instalar necesita tener un formato en especial o se instala tambien en FAT32.
__________________
Saludos
Herje
http://www.forodelinux.org
Hosting Gratis para proyectos libres.
  #16 (permalink)  
Antiguo 17/07/2004, 14:51
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Cita:
Iniciado por lical
(...) tienes que "hacer" que sean SCSI (...)
Creo haber leído recientemente en algún lugar que ya no es necesaria la emulación SCSI para grabar, en caso de grabadoras IDE. Si mal no recuerdo (no os fiéis de mi memoria), la cuestión es que para grabar se usa como base cdrecord, y su creador lo programó para SCSI (creo que el motivo es que él usaba SCSI). Por lo visto, el propio Linus Torvalds envió un parche al programador de cdrecord para soportar la grabación IDE sin necesidad de emulación SCSI. Por lo tanto, lo que hace falta es una versión actualizada de cdrecord.

Repito: no estoy seguro de que la historia sea tal y como la he contado (la memoria falla). Pero la emulación no es necesaria, eso seguro:

Cita:
Iniciado por leído en Libertonia
** Grabación de CDs (sin emulación SCSI)

Como ya comenté en el capítulo sobre la configuración del núcleo y como ya casi todo el mundo sabe, NO es necesaria emulación SCSI para grabar CDs sobre la mayoría de los dispositivos ATAPI CDRom.

Grabar un archivo imagen en un CD, usando el soporte nativo, es tan simple como esto:

cdrecord -dev=/dev/hdc [fichero-imagen]

[Nota: La línea de advertencia "Open by devname is unintentional and not supported", que produce la ejecución de 'cdrecord' con esta opción, no debe provocar aquí confusión alguna. Mientras siga ahí, simplemente, no hay que tenerla en consideración.]
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 07:51.