Shell script para duplicação de CD's

Publicado por Sandro Marcell 06/07/2008

[ Hits: 4.551 ]

Homepage: http://sanmarcell.wordpress.com

Download dushell.sh




Este script duplica CD's de áudio e dados.

Ótimo para duplicar CD's com setores de boot, tais como CD's de jogos e S.O

É necessário o pacote 'cdrtools' e o 'dialog'.

  



Esconder código-fonte

#!/bin/sh 

## DuShell.sh - Shell script para duplicação de CD's
## Escrito por: Sandro Marcell P. Barbosa (Boa Vista - Roraima)
## E-mail: [email protected]
## Slackware GNU/Linux 10.1

# Este script duplica CD's de áudio e dados.
# É utilizada a interface 'dialog'.
# É necessário o pacote 'cdrtools'.
# Verifique as permissões do dispositivo de gravação.
# Se necessário, altere as variavéis de configuração.

# Variavéis de configuração.
GRAVADORA=/dev/cdrom        # Localização do dispositivo de gravação
VELOC_GRAV=48           # Velocidade de gravação
DIR_TRAB=/tmp/dushell-$USER  # Diretório temporário de trabalho

# Caso o usuário 'mate' o processo:
trap 'rm -rf $DIR_TRAB 2> /dev/null ; exit' 0 1 2 3 15

# Função que remove o diretório de trabalho:
Apagar () { rm -rf $DIR_TRAB 2> /dev/null ; }

# Declarando funções de 'dialog':
Dialog_duplicando () {   
      dialog --colors --backtitle "\Zb$TÍTULO" \
      --infobox "\Z5Duplicando... Aguarde!\Zn" 3 30
   }
   
Dialog_troca () {   
      dialog --colors --backtitle "\Zb$TÍTULO"      \
      --title "Cópia concluída"            \
      --msgbox "\Zb\Z7Insira um CD 'virgem' no drive para\
      continuar ou tecle <ESC> para cancelar.\Zn" 6 50      
   }

Dialog_problema () {   
      dialog --colors --backtitle "\Zb$TÍTULO" \
      --title "OCORREU O SEGUINTE PROBLEMA:"   \
      --textbox $DIR_TRAB/$$ 0 0
      }
      
Dialog_gravando () {   
      dialog --colors --backtitle "\Zb$TÍTULO" \
      --infobox "\Zb\Z3Gravando... Aguarde!\Zn" 3 30
   }

Dialog_sucesso () {   
      dialog --colors --backtitle "\Zb$TÍTULO" \
      --msgbox "CD duplicado com sucesso!" 5 30
   }

# Montando a caixa de 'dialog' principal para o usuário:
TÍTULO=$(echo "DuShell.sh - Shell script para duplicação de CD's")

OPÇÃO=$(dialog --stdout --colors --backtitle "\Zb$TÍTULO"           \
   --title "O QUE VOCÊ DESEJA DUPLICAR?"                   \
   --radiolist "\Z1Use as setas direcionais do teclado para navegar\
   pelas opções e tecle <SPACEBAR> para marcar.\Zn" 0 0 0           \
   "Dados"       "Duplicar um CD de dados." ON              \
   "Áudio"       "Duplicar um CD de áudio." OFF              )

# Início da instrução 'case', que checa qual opção o usuário escolheu:       
   case $OPÇÃO in

      Dados) # Duplicando CD's de dados. 

      # Criando caso não exista, o diretório de trabalho:
      if [ ! -d $DIR_TRAB ]; then
         mkdir $DIR_TRAB
      fi

      # Chamando a função 'Dialog_duplicando':
      Dialog_duplicando

      # Iniciando processo de duplicação do CD de dados:
      if ! readcd dev=$GRAVADORA f=$DIR_TRAB/$$.raw \
         speed=$VELOC_GRAV -clone -noerror retries=1 \
         1> /dev/null 2> $DIR_TRAB/$$; then

      # Se houver problemas, a função 'Dialog_problema' é chamada:
      Dialog_problema         
         Apagar
         exit
      fi

      eject $GRAVADORA 2> /dev/null # Ejetando após duplicar!

      # Chamando a função 'Dialog_troca':
      Dialog_troca
      
      # Caso o usuário tecle 'ESC':
      if [ $? -eq 255 ]; then
         dialog --colors --backtitle "\Zb$TÍTULO" \
         --infobox "\Zb\Z1Duplicação de CD cancelada!\Zn" 3 35
         Apagar
         exit
      fi
      
      # Chamando a função 'Dialog_gravando':
      Dialog_gravando

      # 1... 2... 3... Gravando!: 
      if ! cdrecord gracetime=2 dev=$GRAVADORA speed=$VELOC_GRAV \
         -raw96r driveropts=burnfree -clone -force -eject \
         $DIR_TRAB/$$.raw 1> /dev/null 2> $DIR_TRAB/$$; then

      # Se houver problemas, a função 'Dialog_problema' é chamada:
      Dialog_problema
         Apagar
         exit
      fi

      # Se a duplicação ocorreu sem problemas,
      # a função 'Dialog_sucesso' é chamada:
      Dialog_sucesso
      Apagar
      exit
      ;;
      
      #----------------------------------------------#
      
      Áudio) # Duplicando CD's de áudio.
      
      if [ ! -d $DIR_TRAB ]; then
         mkdir $DIR_TRAB
      fi

      Dialog_duplicando

      # Início do processo de duplicação do CD de áudio:
      cd $DIR_TRAB
      if ! cdda2wav dev=$GRAVADORA -x -v all -L 0 \
         -B -O raw -S $VELOC_GRAV \
         1> /dev/null 2> $$; then

      Dialog_problema         
         Apagar
         exit
      fi
      
      eject $GRAVADORA 2> /dev/null
      
      Dialog_troca
      
      if [ $? -eq 255 ]; then
         dialog --colors --backtitle "\Zb$TÍTULO" \
         --infobox "\Zb\Z1Duplicação de CD cancelada!\Zn" 3 35
         Apagar
         exit
      fi
      
      Dialog_gravando

      # Gravando CD de áudio:
      if ! cdrecord gracetime=2 dev=$GRAVADORA speed=$VELOC_GRAV \
         -raw96r driveropts=burnfree -eject -useinfo -text \
         -audio -shorttrack *.raw 1> /dev/null 2> $$; then 

      Dialog_problema         
         Apagar
         exit
      fi

      Dialog_sucesso
      Apagar
      exit
      ;;

      *) exit ;; 
      
   esac
exit

Scripts recomendados

Montagem e desmontagem de dispositivos

Fatorial

Compilador automatizado de kernel Linux (para BSRSoft ServerUX II, Debian, Ubuntu e Debians-like)

Automatizando backups no Samba

Simples Verificador de E-mail Gmail


  

Comentários
[1] Comentário enviado por SMarcell em 06/07/2008 - 15:38h

Caraca! Eu nem me lembrava mais deste script!!! Fazia tanto tempo que havia posto ele na fila de espera aqui do VOL (coisa de +/- um ano atrás).

P.S. Esse script não está funcionando 100%.

Algum dia irei concertá-lo!

;)

[2] Comentário enviado por pintofree em 07/07/2008 - 09:35h

E ai amigo, antes tarde do que nunca né
mais nao desiste nao concerta ele ai.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts