Graver en ligne de commande

De Le Wiki de debian-fr.xyz
Aller à : navigation, rechercher

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).

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 #-----------------------------------------------#
  8 
  9 #------------------ Reste à Faire : -----------------------------#
 10 # Préciser les dépendances                                       #
 11 # Ajouter une fonction pour vérifier que les dépendances sont là #
 12 # Revoir la gravure de fichiers audio                            #
 13 # Une meilleure vérification des données                         #
 14 #----------------------------------------------------------------#
 15 
 16 set -eu
 17 
 18 LISTE=/tmp/liste
 19 LISTEAGRAVER=/tmp/liste_graver
 20 TMPDIR=/tmp/gravure
 21 GRAVURE='1'
 22 
 23 ERR_INTEGR=101
 24 
 25 choix_fichier_ () {
 26   local FICHIER=''
 27 
 28 # Fonction qui va choisir le fichier
 29 # on quitte lorsque l'on rentre la valeur 0
 30 # On enregistre une liste des fichiers, le choix fait est reporté
 31 # dans la LISTEAGRAVER
 32   case "$1" in
 33     'iso' )
 34 
 35 		;;
 36 		'donnees' )
 37       echo 'Choisir la liste des fichiers à ajouter :'
 38 		  while [ "$FICHIER" != 0 ]; do
 39 
 40       ls -ApX | nl -n ln | tee "$LISTE"
 41 		  echo '------------------------------------------'
 42 		  echo  "0 \t J'ai fini! \n"
 43 		  read CHOIX
 44 		  if [ "$CHOIX" = 0 ]; then
 45 			  break
 46 		  else
 47 			  FICHIER=$(echo "$PWD/$(sed -n ${CHOIX}p $LISTE | awk -F"\t" '{print $2}')")
 48 			  # Le nom du fichier est enregistré dans /tmp/liste_graver
 49 			  #S'il s'agit d'un répertoire, on propose de l'ajouter à la liste, ou d'aller dedans
 50 
 51 			  case "$FICHIER" in
 52           */ | .. ) echo "1) Changer de répertoire : $FICHIER"
 53 				    echo '2) Ajouter ce répertoire pour le graver'
 54 				    read R
 55 				    case $R in
 56 					    1 ) cd "$FICHIER" ;;
 57 					    2 ) echo "$FICHIER" >> "$LISTEAGRAVER" ;;
 58 				        esac
 59 				      ;;
 60 			        *) echo "$FICHIER" >> "$LISTEAGRAVER" ;;
 61 			    esac
 62 		    fi
 63 		   done
 64 		;;
 65 	esac
 66 }
 67 
 68 
 69 edite_ () {
 70   local C=1
 71   while [ "$C" != 0 ]; do
 72 	  echo  "Voici la liste des fichiers à graver : \n"
 73 	  cat "$LISTEAGRAVER"
 74 	  echo  "\n \n"
 75 	  echo  "1)\t Ajouter des fichiers "
 76 	  echo  "2)\t Enlever des fichiers"
 77 	  echo  "0)\t J'ai fini! "
 78 	  read C
 79 	  case $C in
 80 		  1 ) choix_fichier_ ;;
 81 		  0 ) break ;;
 82 		  2 ) echo 'Que supprimer?'
 83         nl -n ln "$LISTEAGRAVER"
 84 			  read SUPPR
 85 			  if  [ "$SUPPR" -le $(wc -l < "$LISTEAGRAVER") ] && [ "$SUPPR" != "" ] ; then
 86 				  sed ${SUPPR}d "$LISTEAGRAVER" > /tmp/listetmp
 87 				  mv /tmp/listetmp $LISTEAGRAVER
 88 			  else
 89 				  echo "*** Erreur, ce numéro n'est pas disponible ***"
 90 				  echo '*** Entrez un choix valide ***'
 91 			  fi
 92 			  ;;
 93 		  * ) echo 'Veuillez entrer un choix valide' ;;
 94 	  esac
 95 
 96    done
 97 }
 98 
 99 # controle de l'image
100 # Retourne 0 si le CD gravé est conforme à l'image ISO,
101 # 1 sinon.
102 verif_integrite_ () {
103   local MD5_ISO=$(md5sum "$1" | awk '{print $1}')
104   echo "md5sum de l'iso : $MD5_ISO" >&2
105   local MD5_CD=$(md5sum /dev/scd0 | awk '{print $1}')
106   echo "md5sum du cd gravé: $MD5_CD" >&2
107 
108   # Donne à la fonction sa valeur de retour
109   [ "$MD5_ISO" -eq "$MD5_CD" ]
110 }
111 
112 grave_iso_ () {
113   echo "Choisissez l'image iso à graver"
114   choix_fichier_ 'iso'
115 
116   if [ -n "$(cat $LISTEAGRAVER)" ]; then
117     echo "on va graver $(cat $LISTEAGRAVER)"
118     echo  "L'image à graver fait: \t $(du -h $(cat $LISTEAGRAVER) | awk '{print $1}')"
119     echo  'Assurez-vous que votre cd/dvd est assez grand'
120     echo 'On y va? (O/N)'
121     read CHOIX
122     case $CHOIX in
123       O | o )
124         wodim -v dev=/dev/scd0 -data "$(cat $LISTEAGRAVER)"
125         if ! verif_integrite_ "$(cat $LISTEAGRAVER)"; then
126           echo "Erreur: echec lors de la vérification d'intégrité" >&2
127           exit $ERR_INTEGR
128         fi
129         ;;
130       N | n ) echo "annulation de la gravure"
131         ;;
132     esac
133   fi
134 }
135 
136 grave_donnees_ () {
137 	choix_fichier_ 'donnees'
138 	echo 'on édite la liste qui est à graver :'
139 	edite_
140 	echo 'Quel est le nom du volume ?'
141 	read NOMVOLUME
142 	if [ -n "$(cat $LISTEAGRAVER)" ]; then
143 	  ###on lance la gravure
144 		echo "Creation de l'image à graver"
145 		genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat $LISTEAGRAVER)
146 		if [ ! -f /tmp/$NOMVOLUME.iso ]; then
147 			echo "Erreur lors de la création de l'image"
148 			exit 666
149 		fi
150 		#on affiche un avertissement sur la taille du fichier à graver
151 		echo  "L'image à graver fait: \t $(du -h /tmp/$NOMVOLUME.iso | awk '{print $1}')"
152 		echo  "Assurez-vous que votre cd/dvd est assez grand"
153 		echo "On y va? (O/N)"
154 		read CHOIX
155 		case $CHOIX in
156 			O | o )
157 			  wodim -v dev=/dev/scd0 -data /tmp/$NOMVOLUME.iso
158 			  if ! verif_integrite_ /tmp/$NOMVOLUME.iso; then
159           echo "Erreur: echec lors de la vérification d'intégrité" >&2
160           exit $ERR_INTEGR
161         fi
162 			;;
163 			N | n ) echo "annulation de la gravure"
164 			;;
165 		esac
166 	fi
167 }
168 
169 grave_audio_ () {
170   mkdir -p $TMPDIR
171   [ -d $TMPDIR ]
172     if [ $? = 0 ]; then
173       choix_fichier_
174       edite_
175       echo  "\n \n On va maintenant convertir les fichiers pour les graver"
176       cd $TMPDIR
177       cp "$(cat $LISTEAGRAVER )" $TMPDIR
178       echo "conversion des mp3 en wav"
179       for i in *.[Mm][Pp]3; do
180         lame --verbose --decode "$i" "${i%.mp3}.wav";
181       done
182       echo "conversion des ogg en wav"
183       oggdec *.ogg
184       echo "conversion des flac en wav"
185       flac --decode *.flac
186       echo "normalisation"
187       normalize-audio --mix *.wav
188       for i in *.wav ; do
189         echo "Traitement de ${i}"
190         sox "$i" "${i/%.wav/.cdr}"
191       done
192 #on affiche un avertissement sur la taille du fichier à graver
193       echo "Les données à graver font: \t $(du -sh $TMPDIR | awk '{print $1}')"
194       echo 'Assurez-vous que votre cd est assez grand'
195       echo 'On y va? (O/N)'
196       read CHOIX
197       case $CHOIX in
198         O | o )
199           echo  " \tOn va maintenant graver!!! \n \n "
200           sleep 2
201           wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr
202         ;;
203         N | n ) echo 'annulation de la gravure'
204         ;;
205       esac
206    fi
207 }
208 
209 efface_disque_ () {
210   local EFFACEMENT=1
211 	while [ "$EFFACEMENT" != 0 ]; do
212 		echo "Comment souhaitez-vous effacer le disque?"
213 		echo  "1 \t Effacement complet"
214 		echo  "2 \t Effacement rapide "
215 		echo  "0 \t Annuler "
216 		read EFFACEMENT
217 
218 		case $EFFACEMENT in
219 			2 )
220 				echo "C'est parti pour un effacement rapide :"
221 				sleep 1
222 				wodim blank=fast
223 				break
224 			;;
225 			1 )
226 				echo "C'est parti pour un effacement complet :"
227 				sleep 1
228 				wodim blank=all
229 				break
230 			;;
231 			* ) echo 'Veuillez entrer un choix valide' ;;
232 		esac
233 	done
234 }
235 
236 echo '                     |//'
237 echo '                    (o o)'
238 echo '+-------------oOO----(_)---------------------+'
239 echo '|--------------------------------------------|'
240 echo '|---------------- ¤ BONJOUR ! ¤ -------------|'
241 echo '|----- ¤ Ce Script va vous permettre ¤ ------|'
242 echo '|--------- ¤ de graver facilement ¤ ---------|'
243 echo '|-------------- ¤ vos données ¤ -------------|'
244 echo '+--------------------oOO---------------------+'
245 echo '                   |__|__|'
246 echo '                    || ||'
247 echo '                   ooO Ooo'
248 echo " \n \n \n "
249 
250 while [ "$GRAVURE" != 0 ]; do
251 	echo  "Que souhaitez-vous faire? (Entrez le numéro de votre choix) \n \n"
252 	echo  "1 \t Un disque de données "
253 	#echo  "2 \t Un disque audio "
254 	echo  "2 \t Graver une image iso "
255 	echo  "3 \t Effacer le disque "
256 	echo  "0 \t Quitter "
257 	read GRAVURE
258 
259 case $GRAVURE in
260 	1 ) grave_donnees_ ;;
261 	#2 ) grave_audio_ ;;
262 	2 ) grave_iso_ ;;
263 	3 ) efface_disque_ ;;
264 	0 )
265 		echo '
266                          ''~''
267                         ( o o )
268 +------------------.oooO--(_)--Oooo.------------------+
269 |                                                     |
270 |                      À BIENTÔT                      |
271 |                    .oooO                            |
272 |                    (   )   Oooo.                    |
273 +---------------------\ (----(   )--------------------+
274                        \_)    ) /
275                              (_/
276 '
277 		exit 2
278 	;;
279 	* ) echo 'Veuillez entrer un choix valide' ;;
280 esac
281 done
282 
283 
284 exit 0