« Graver en ligne de commande » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
Ce script doit permettre de graver en ligne de commande des disques de données, des images iso, et si possible de créer des cd audio (Cette dernière fonction n'est pas prête pour l'instant).
Ce script doit permettre de graver en ligne de commande des disques de données, des images iso, et si possible de créer des cd audio (Cette dernière fonction n'est pas prête pour l'instant).


Attention, le script est en cours d'élaboration (les tests positifs ont été réalisé en bash).
Attention, le script est en cours d'élaboration.


Surtout ne pas hésiter à améliorer le script, il est sur le wiki rien que pour ça.
Surtout ne pas hésiter à améliorer le script, il est sur le wiki rien que pour ça.
Ligne 26 : Ligne 26 :
LISTEAGRAVER=/tmp/liste_graver
LISTEAGRAVER=/tmp/liste_graver
TMPDIR=/tmp/gravure
TMPDIR=/tmp/gravure
GRAVURE='1'
GRAVURE="1"


ERR_INTEGR=101
ERR_INTEGR=101


choix_fichier_ () {
choix_fichier_ () {
  local FICHIER=''


# Fonction qui va choisir le fichier
# Fonction qui va choisir le fichier
Ligne 37 : Ligne 36 :
# On enregistre une liste des fichiers, le choix fait est reporté
# On enregistre une liste des fichiers, le choix fait est reporté
# dans la LISTEAGRAVER
# dans la LISTEAGRAVER
case "$1" in
case $1 in
'iso' )
"iso" )


;;
;;
'donnees' )
"donnees" )
    while [ "$FICHIER" != 0 ]; do
    while [ "$FICHIER" != 0 ]; do
 
                     
          ls -ApX | nl -n ln | tee $LISTE
      ls -a -p -X | sed = | sed 'N;s/\n/\t/' > $LISTE
      cat $LISTE
      echo "------------------------------------------"
      echo "------------------------------------------"
      echo  "0 \t J'ai fini! \n"
      echo  "0 \t J'ai fini! \n"
Ligne 54 : Ligne 54 :
  # Le nom du fichier est enregistré dans /tmp/liste_graver
  # Le nom du fichier est enregistré dans /tmp/liste_graver
  #S'il s'agit d'un répertoire, on propose de l'ajouter à la liste, ou d'aller dedans
  #S'il s'agit d'un répertoire, on propose de l'ajouter à la liste, ou d'aller dedans
 
 
  case "$FICHIER" in
  case $FICHIER in
    */ | .. ) echo "1) Changer de répertoire : $FICHIER"
    */ | .. ) echo "1) Changer de répertoire : $FICHIER"
      echo '2) Ajouter ce répertoire pour le graver'
      echo "2) Ajouter ce répertoire pour le graver"
      read R
      read R
      case $R in
      case $R in
1 ) cd "$FICHIER" ;;
1 ) cd $FICHIER ;;
2 ) echo "$FICHIER" >> "$LISTEAGRAVER" ;;
2 ) echo $FICHIER >> $LISTEAGRAVER ;;
      esac
      esac
      ;;
      ;;
 
   
 
   
    *) echo "$FICHIER" >> "$LISTEAGRAVER" ;;
    *) echo $FICHIER >> $LISTEAGRAVER ;;
esac
esac
      fi
      fi    
  done
  done
;;
;;
Ligne 76 : Ligne 76 :


edite_ () {
edite_ () {
  local C=1
  while [ "$C" != 0 ]; do
  while [ "$C" != 0 ]; do
  echo  "Voici la liste des fichiers à graver : \n"
  echo  "Voici la liste des fichiers à graver : \n"
  cat $LISTEAGRAVER
  cat "$LISTEAGRAVER"
  echo  "\n \n"
  echo  "\n \n"
  echo  "1)\t Ajouter des fichiers "
  echo  "1)\t Ajouter des fichiers "
  echo  "2)\t Enlever des fichiers"
  echo  "2)\t Enlever des fichiers"
  echo  "0)\t J'ai fini! "
  echo  "0)\t J'ai fini! "
  read C
  read C
  case $C in
  case $C in
1 ) choix_fichier_ ;;
  1 ) choix_fichier_ ;;
0 ) break ;;
  0 ) break ;;
2 ) echo "Que supprimer?"
  2 ) echo 'Que supprimer?'
cat $LISTEAGRAVER | sed = | sed 'N;s/\n/\t/'
        ln -n ln "$LISTEAGRAVER"
read SUPPR
  read SUPPR
if  [ $SUPPR -le $(cat $LISTEAGRAVER |wc -l) ] && [ "$SUPPR" != "" ] ; then
  if  [ "$SUPPR" -le $(wc -l < "$LISTEAGRAVER") ] && [ "$SUPPR" != "" ] ; then
sed ${SUPPR}d $LISTEAGRAVER > /tmp/listetmp
  sed ${SUPPR}d "$LISTEAGRAVER" > /tmp/listetmp
mv /tmp/listetmp $LISTEAGRAVER
  mv /tmp/listetmp $LISTEAGRAVER
else
  else
echo "*** Erreur, ce numéro n'est pas disponible ***"
  echo "*** Erreur, ce numéro n'est pas disponible ***"
echo "*** Entrez un choix valide ***"
  echo '*** Entrez un choix valide ***'
fi
  fi
;;
  ;;
* ) echo "Veuillez entrer un choix valide" ;;
  * ) echo 'Veuillez entrer un choix valide' ;;
  esac
  esac
 
 
   done
   done
}
}
Ligne 109 : Ligne 108 :
# 1 sinon.
# 1 sinon.
verif_integrite_ () {
verif_integrite_ () {
   local MD5_ISO=$(md5sum "$1" | awk '{print $1}')
   MD5_ISO=$(md5sum "$1" | awk '{print $1}')
   echo "md5sum de l'iso : $MD5_ISO" >&2
   echo "md5sum de l'iso : $MD5_ISO" >&2
   local MD5_CD=$(md5sum /dev/scd0 | awk '{print $1}')
   MD5_CD=$(md5sum /dev/scd0 | awk '{print $1}')
   echo "md5sum du cd gravé: $MD5_CD" >&2
   echo "md5sum du cd gravé: $MD5_CD" >&2


Ligne 120 : Ligne 119 :
grave_iso_ () {
grave_iso_ () {
   echo "Choisissez l'image iso à graver"
   echo "Choisissez l'image iso à graver"
   choix_fichier_ 'iso'
   choix_fichier_ "iso"
 
 
   if [ -n "$(cat $LISTEAGRAVER)" ]; then
   if [ -n "$(cat $LISTEAGRAVER)" ]; then
       echo "on va graver $(cat $LISTEAGRAVER)"
       echo "on va graver $(cat $LISTEAGRAVER)"
       echo  "L'image à graver fait: \t $(du -h $(cat $LISTEAGRAVER) | awk '{print $1}')"
       echo  "L'image à graver fait: \t $(du -h $(cat $LISTEAGRAVER) | awk '{print $1}')"
       echo  'Assurez-vous que votre cd/dvd est assez grand'
       echo  "Assurez-vous que votre cd/dvd est assez grand"
       echo 'On y va? (O/N)'
       echo "On y va? (O/N)"
       read CHOIX
       read CHOIX
       case $CHOIX in
       case $CHOIX in
Ligne 139 : Ligne 138 :
             ;;
             ;;
   esac
   esac
 
 
   fi
   fi
}
}
grave_donnees_ () {
grave_donnees_ () {
choix_fichier_ 'donnees'
choix_fichier_ "donnees"
echo 'on édite la liste qui est à graver :'
echo "on édite la liste qui est à graver :"
edite_
edite_
echo "Quel est le nom du volume?"
echo "Quel est le nom du volume?"
Ligne 185 : Ligne 183 :
       cd $TMPDIR
       cd $TMPDIR
       cp "$(cat $LISTEAGRAVER )" $TMPDIR
       cp "$(cat $LISTEAGRAVER )" $TMPDIR
      for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done
      for i in *.MP3; do mv "$i" "`basename "$i" .MP3`.mp3"; done
       echo "conversion des mp3 en wav"
       echo "conversion des mp3 en wav"
       for i in *.[Mm][Pp]3; do
       for i in *.mp3; do
         lame --verbose --decode "$i" "${i%.mp3}.wav";
         lame --verbose --decode "$i" "${i/%.mp3/.wav}";
       done
       done
       echo "conversion des ogg en wav"
       echo "conversion des ogg en wav"
Ligne 198 : Ligne 198 :
         echo "Traitement de ${i}"
         echo "Traitement de ${i}"
         sox "$i" "${i/%.wav/.cdr}"
         sox "$i" "${i/%.wav/.cdr}"
       done
       done  
#on affiche un avertissement sur la taille du fichier à graver
#on affiche un avertissement sur la taille du fichier à graver
       echo "Les données à graver font: \t $(du -sh $TMPDIR | awk '{print $1}')"
       echo "Les données à graver font: \t $(du -h $TMPDIR | tail -n1 | awk '{print $1}')"
       echo 'Assurez-vous que votre cd est assez grand'
       echo "Assurez-vous que votre cd est assez grand"
       echo 'On y va? (O/N)'
       echo "On y va? (O/N)"
       read CHOIX
       read CHOIX
       case $CHOIX in
       case $CHOIX in
Ligne 211 : Ligne 211 :
         wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr
         wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr
               ;;
               ;;
             N | n ) echo 'annulation de la gravure'
             N | n ) echo "annulation de la gravure"
         ;;
         ;;
       esac
       esac
 
     
 
     
   fi
   fi
}
}


efface_disque_ () {
efface_disque_ () {
  local EFFACEMENT=1
while [ "$EFFACEMENT" != 0 ]; do
while [ "$EFFACEMENT" != 0 ]; do
echo "Comment souhaitez-vous effacer le disque?"
echo "Comment souhaitez-vous effacer le disque?"
Ligne 241 : Ligne 240 :
break
break
;;
;;
* ) echo 'Veuillez entrer un choix valide' ;;
* ) echo "Veuillez entrer un choix valide" ;;
esac
esac
done
done
}
}


echo '                     |//'
echo "                     |//"
echo '                   (o o)'
echo "                   (o o)"
echo '+-------------oOO----(_)---------------------+'
echo "+-------------oOO----(_)---------------------+"
echo '|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|'
echo "|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|"
echo '|~~~~~~~~~~~~~~~~ ¤ BONJOUR ! ¤ ~~~~~~~~~~~~~|'
echo "|~~~~~~~~~~~~~~~~ ¤ BONJOUR ! ¤ ~~~~~~~~~~~~~|"
echo '|~~~~~ ¤ Ce Script va vous permettre ¤ ~~~~~~|'
echo "|~~~~~ ¤ Ce Script va vous permettre ¤ ~~~~~~|"
echo '|~~~~~~~~~ ¤ de graver facilement ¤ ~~~~~~~~~|'
echo "|~~~~~~~~~ ¤ de graver facilement ¤ ~~~~~~~~~|"
echo '|~~~~~~~~~~~~~~ ¤ vos données ¤ ~~~~~~~~~~~~~|'
echo "|~~~~~~~~~~~~~~ ¤ vos données ¤ ~~~~~~~~~~~~~|"
echo '--------------------oOO----------------------+'
echo "--------------------oOO----------------------+"
echo '                   |__|__|'
echo "                   |__|__|"
echo '                   || ||'
echo "                   || ||"
echo '                   ooO Ooo'
echo "                   ooO Ooo"
echo " \n \n \n "
echo " \n \n \n "


Ligne 274 : Ligne 273 :
2 ) grave_iso_ ;;
2 ) grave_iso_ ;;
3 ) efface_disque_ ;;
3 ) efface_disque_ ;;
0 )
0 )  
echo '
echo "
                         ''~''
                         ''~''
                         ( o o )
                         ( o o )
Ligne 286 : Ligne 285 :
                       \_)    ) /
                       \_)    ) /
                             (_/
                             (_/
'
"
exit 2
exit 2  
;;
;;
* ) echo 'Veuillez entrer un choix valide' ;;
* ) echo "Veuillez entrer un choix valide" ;;
esac
esac
done
done

Version du 28 février 2011 à 15:18

Ce script doit permettre de graver en ligne de commande des disques de données, des images iso, et si possible de créer des cd audio (Cette dernière fonction n'est pas prête pour l'instant).

Attention, le script est en cours d'élaboration.

Surtout ne pas hésiter à améliorer le script, il est sur le wiki rien que pour ça.

  1. !/bin/sh
  2. -----------------------------------------------#
  3. Script pour graver en console plus facilement #
  4. nécessite genisoimage, wodim, #
  5. éventuellement oggdec, sox, lame, flac... #
  6. pour les conversions de fichiers audio #
  7. -----------------------------------------------#
  1. ------------------ Reste à Faire : -----------------------------#
  2. Préciser les dépendances #
  3. Ajouter une fonction pour vérifier que les dépendances sont là #
  4. Revoir la gravure de fichiers audio #
  5. Une meilleure vérification des données #
  6. ----------------------------------------------------------------#

set -eu

LISTE=/tmp/liste LISTEAGRAVER=/tmp/liste_graver TMPDIR=/tmp/gravure GRAVURE="1"

ERR_INTEGR=101

choix_fichier_ () {

  1. Fonction qui va choisir le fichier
  2. on quitte lorsque l'on rentre la valeur 0
  3. On enregistre une liste des fichiers, le choix fait est reporté
  4. dans la LISTEAGRAVER

case $1 in "iso" )

;; "donnees" ) while [ "$FICHIER" != 0 ]; do

ls -a -p -X | sed = | sed 'N;s/\n/\t/' > $LISTE cat $LISTE echo "------------------------------------------" echo "0 \t J'ai fini! \n" read CHOIX if [ "$CHOIX" = 0 ]; then break else FICHIER=$(echo "$PWD/$(sed -n ${CHOIX}p $LISTE | awk -F"\t" '{print $2}')") # Le nom du fichier est enregistré dans /tmp/liste_graver #S'il s'agit d'un répertoire, on propose de l'ajouter à la liste, ou d'aller dedans

case $FICHIER in */ | .. ) echo "1) Changer de répertoire : $FICHIER" echo "2) Ajouter ce répertoire pour le graver" read R case $R in 1 ) cd $FICHIER ;; 2 ) echo $FICHIER >> $LISTEAGRAVER ;; esac  ;;


*) echo $FICHIER >> $LISTEAGRAVER ;; esac fi done ;; esac }


edite_ () {

  while [ "$C" != 0 ]; do

echo "Voici la liste des fichiers à graver : \n" cat $LISTEAGRAVER echo "\n \n" echo "1)\t Ajouter des fichiers " echo "2)\t Enlever des fichiers" echo "0)\t J'ai fini! " read C case $C in 1 ) choix_fichier_ ;; 0 ) break ;; 2 ) echo "Que supprimer?" cat $LISTEAGRAVER | sed = | sed 'N;s/\n/\t/' read SUPPR if [ $SUPPR -le $(cat $LISTEAGRAVER |wc -l) ] && [ "$SUPPR" != "" ] ; then sed ${SUPPR}d $LISTEAGRAVER > /tmp/listetmp mv /tmp/listetmp $LISTEAGRAVER else echo "*** Erreur, ce numéro n'est pas disponible ***" echo "*** Entrez un choix valide ***" fi ;; * ) echo "Veuillez entrer un choix valide" ;; esac

  done

}

  1. controle de l'image
  2. Retourne 0 si le CD gravé est conforme à l'image ISO,
  3. 1 sinon.

verif_integrite_ () {

  MD5_ISO=$(md5sum "$1" | awk '{print $1}')
  echo "md5sum de l'iso : $MD5_ISO" >&2
  MD5_CD=$(md5sum /dev/scd0 | awk '{print $1}')
  echo "md5sum du cd gravé: $MD5_CD" >&2
  # Donne à la fonction sa valeur de retour
  [ "$MD5_ISO" -eq "$MD5_CD" ]

}

grave_iso_ () {

  echo "Choisissez l'image iso à graver"
  choix_fichier_ "iso"
  
  if [ -n "$(cat $LISTEAGRAVER)" ]; then
     echo "on va graver $(cat $LISTEAGRAVER)"
     echo  "L'image à graver fait: \t $(du -h $(cat $LISTEAGRAVER) | awk '{print $1}')"
     echo  "Assurez-vous que votre cd/dvd est assez grand"
     echo "On y va? (O/N)"
     read CHOIX
     case $CHOIX in
        O | o )
           wodim -v dev=/dev/scd0 -data "$(cat $LISTEAGRAVER)"
           if ! verif_integrite_ "$(cat $LISTEAGRAVER)"; then
             echo "Erreur: echec lors de la vérification d'intégrité" >&2
             exit $ERR_INTEGR
           fi
           ;;
        N | n ) echo "annulation de la gravure"
           ;;
  esac
  
  fi

} grave_donnees_ () { choix_fichier_ "donnees" echo "on édite la liste qui est à graver :" edite_ echo "Quel est le nom du volume?" read NOMVOLUME if [ -n "$(cat $LISTEAGRAVER)" ]; then ###on lance la gravure echo "Creation de l'image à graver" genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat $LISTEAGRAVER) if [ ! -f /tmp/$NOMVOLUME.iso ]; then echo "Erreur lors de la création de l'image" exit 666 fi #on affiche un avertissement sur la taille du fichier à graver echo "L'image à graver fait: \t $(du -h /tmp/$NOMVOLUME.iso | awk '{print $1}')" echo "Assurez-vous que votre cd/dvd est assez grand" echo "On y va? (O/N)" read CHOIX case $CHOIX in O | o ) wodim -v dev=/dev/scd0 -data /tmp/$NOMVOLUME.iso if ! verif_integrite_ /tmp/$NOMVOLUME.iso; then

                             echo "Erreur: echec lors de la vérification d'intégrité" >&2
                             exit $ERR_INTEGR
                           fi

;; N | n ) echo "annulation de la gravure" ;; esac fi }

grave_audio_ () {

  mkdir -p $TMPDIR
  [ -d $TMPDIR ]
   if [ $? = 0 ]; then
     choix_fichier_
     edite_
     echo  "\n \n On va maintenant convertir les fichiers pour les graver"
     cd $TMPDIR
     cp "$(cat $LISTEAGRAVER )" $TMPDIR
     for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done
     for i in *.MP3; do mv "$i" "`basename "$i" .MP3`.mp3"; done
     echo "conversion des mp3 en wav"
     for i in *.mp3; do
        lame --verbose --decode "$i" "${i/%.mp3/.wav}";
     done
     echo "conversion des ogg en wav"
     oggdec *.ogg
     echo "conversion des flac en wav"
     flac --decode *.flac
     echo "normalisation"
     normalize-audio --mix *.wav
     for i in *.wav ; do
        echo "Traitement de ${i}"
        sox "$i" "${i/%.wav/.cdr}"
     done   
  1. on affiche un avertissement sur la taille du fichier à graver
     echo  "Les données à graver font: \t $(du -h $TMPDIR | tail -n1 | awk '{print $1}')"
     echo  "Assurez-vous que votre cd est assez grand"
     echo "On y va? (O/N)"
     read CHOIX
     case $CHOIX in
        O | o )
        echo  " \tOn va maintenant graver!!! \n \n "
        sleep 2
        wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr
              ;;
           N | n ) echo "annulation de la gravure"
        ;;
     esac
     
     
  fi

}

efface_disque_ () { while [ "$EFFACEMENT" != 0 ]; do echo "Comment souhaitez-vous effacer le disque?" echo "1 \t Effacement complet" echo "2 \t Effacement rapide " echo "0 \t Annuler " read EFFACEMENT

case $EFFACEMENT in 2 ) echo "C'est parti pour un effacement rapide :" sleep 1 wodim blank=fast break ;; 1 ) echo "C'est parti pour un effacement complet :" sleep 1 wodim blank=all break ;; * ) echo "Veuillez entrer un choix valide" ;; esac done }

echo " |//" echo " (o o)" echo "+-------------oOO----(_)---------------------+" echo "|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|" echo "|~~~~~~~~~~~~~~~~ ¤ BONJOUR ! ¤ ~~~~~~~~~~~~~|" echo "|~~~~~ ¤ Ce Script va vous permettre ¤ ~~~~~~|" echo "|~~~~~~~~~ ¤ de graver facilement ¤ ~~~~~~~~~|" echo "|~~~~~~~~~~~~~~ ¤ vos données ¤ ~~~~~~~~~~~~~|" echo "--------------------oOO----------------------+" echo " |__|__|" echo " || ||" echo " ooO Ooo" echo " \n \n \n "

while [ "$GRAVURE" != 0 ]; do echo "Que souhaitez-vous faire? (Entrez le numéro de votre choix) \n \n" echo "1 \t Un disque de données " #echo "2 \t Un disque audio " echo "2 \t Graver une image iso " echo "3 \t Effacer le disque " echo "0 \t Quitter " read GRAVURE

case $GRAVURE in 1 ) grave_donnees_ ;; #2 ) grave_audio_ ;; 2 ) grave_iso_ ;; 3 ) efface_disque_ ;; 0 ) echo "

                        ~
                       ( o o )

+------------------.oooO--(_)--Oooo.------------------+ | | | À BIENTÔT | | .oooO | | ( ) Oooo. | +---------------------\ (----( )--------------------+

                      \_)    ) /
                            (_/

" exit 2 ;; * ) echo "Veuillez entrer un choix valide" ;; esac done


exit 0