editor
621
modifications
m (change <pre> en ajout d'un espace en début de ligne) |
m (ajout de numérotation des lignes par <syntaxhighlight lang="bash" line='line'>) |
||
(2 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 5 : | Ligne 5 : | ||
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. | ||
<syntaxhighlight lang="sh" line='line'> | |||
#!/bin/sh | |||
#-----------------------------------------------# | |||
# Script pour graver en console plus facilement # | |||
# nécessite genisoimage, wodim, # | |||
# éventuellement oggdec, sox, lame, flac... # | |||
# pour les conversions de fichiers audio # | |||
#-----------------------------------------------# | |||
#------------------ Reste à Faire : -----------------------------# | |||
# Préciser les dépendances # | |||
# Ajouter une fonction pour vérifier que les dépendances sont là # | |||
# Revoir la gravure de fichiers audio # | |||
# Une meilleure vérification des données # | |||
#----------------------------------------------------------------# | |||
set -eu | |||
LISTE=/tmp/liste | |||
LISTEAGRAVER=/tmp/liste_graver | |||
TMPDIR=/tmp/gravure | |||
GRAVURE='1' | |||
ERR_INTEGR=101 | |||
choix_fichier_ () { | |||
local FICHIER='' | |||
# Fonction qui va choisir le fichier | |||
# on quitte lorsque l'on rentre la valeur 0 | |||
# On enregistre une liste des fichiers, le choix fait est reporté | |||
# dans la LISTEAGRAVER | |||
case "$1" in | |||
'iso' ) | |||
;; | |||
'donnees' ) | |||
echo 'Choisir la liste des fichiers à ajouter :' | |||
while [ "$FICHIER" != 0 ]; do | |||
ls -ApX | nl -n ln | tee "$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_ () { | |||
local C=1 | |||
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?' | |||
nl -n ln "$LISTEAGRAVER" | |||
read SUPPR | |||
if [ "$SUPPR" -le $(wc -l < "$LISTEAGRAVER") ] && [ "$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 | |||
} | |||
# controle de l'image | |||
# Retourne 0 si le CD gravé est conforme à l'image ISO, | |||
# 1 sinon. | |||
verif_integrite_ () { | |||
local MD5_ISO=$(md5sum "$1" | awk '{print $1}') | |||
echo "md5sum de l'iso : $MD5_ISO" >&2 | |||
local 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 | |||
echo "conversion des mp3 en wav" | |||
for i in *.[Mm][Pp]3; 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 | |||
#on affiche un avertissement sur la taille du fichier à graver | |||
echo "Les données à graver font: \t $(du -sh $TMPDIR | 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 | fi | ||
} | |||
efface_disque_ () { | |||
local EFFACEMENT=1 | |||
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 | |||
</syntaxhighlight> | |||
[[Category:Scripts]] | [[Category:Scripts]] |