« Graver en ligne de commande » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
m (ajout de numérotation des lignes par <syntaxhighlight lang="bash" line='line'>) |
||
(7 versions intermédiaires par 2 utilisateurs non affichées) | |||
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. | 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. | 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 | #!/bin/sh | ||
#-----------------------------------------------# | #-----------------------------------------------# | ||
Ligne 26 : | Ligne 26 : | ||
LISTEAGRAVER=/tmp/liste_graver | LISTEAGRAVER=/tmp/liste_graver | ||
TMPDIR=/tmp/gravure | TMPDIR=/tmp/gravure | ||
GRAVURE= | 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 36 : | Ligne 37 : | ||
# 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 | |||
'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 | break | ||
else | |||
FICHIER=$(echo "$PWD/$(sed -n ${CHOIX}p $LISTE | awk -F"\t" '{print $2}')") | FICHIER=$(echo "$PWD/$(sed -n ${CHOIX}p $LISTE | awk -F"\t" '{print $2}')") | ||
# 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 '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 | done | ||
;; | ;; | ||
Ligne 76 : | Ligne 75 : | ||
edite_ () { | 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 | done | ||
} | } | ||
Ligne 108 : | Ligne 108 : | ||
# 1 sinon. | # 1 sinon. | ||
verif_integrite_ () { | 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_ () { | 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_ () { | grave_donnees_ () { | ||
choix_fichier_ | choix_fichier_ 'donnees' | ||
echo | echo 'on édite la liste qui est à graver :' | ||
edite_ | edite_ | ||
echo | echo 'Quel est le nom du volume ?' | ||
read NOMVOLUME | read NOMVOLUME | ||
if [ -n "$(cat $LISTEAGRAVER)" ]; then | if [ -n "$(cat $LISTEAGRAVER)" ]; then | ||
###on lance la gravure | |||
echo "Creation de l'image à graver" | echo "Creation de l'image à graver" | ||
genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat $LISTEAGRAVER) | genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat $LISTEAGRAVER) | ||
Ligne 162 : | Ligne 162 : | ||
case $CHOIX in | case $CHOIX in | ||
O | o ) | 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" | N | n ) echo "annulation de la gravure" | ||
Ligne 175 : | Ligne 175 : | ||
grave_audio_ () { | grave_audio_ () { | ||
mkdir -p $TMPDIR | |||
[ -d $TMPDIR ] | |||
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
choix_fichier_ | choix_fichier_ | ||
Ligne 183 : | Ligne 183 : | ||
cd $TMPDIR | cd $TMPDIR | ||
cp "$(cat $LISTEAGRAVER )" $TMPDIR | cp "$(cat $LISTEAGRAVER )" $TMPDIR | ||
echo "conversion des mp3 en wav" | echo "conversion des mp3 en wav" | ||
for i in *. | for i in *.[Mm][Pp]3; do | ||
lame --verbose --decode "$i" "${i%.mp3}.wav"; | |||
done | done | ||
echo "conversion des ogg en wav" | echo "conversion des ogg en wav" | ||
Ligne 196 : | Ligne 194 : | ||
normalize-audio --mix *.wav | normalize-audio --mix *.wav | ||
for i in *.wav ; do | for i in *.wav ; do | ||
echo "Traitement de ${i}" | |||
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 | echo "Les données à graver font: \t $(du -sh $TMPDIR | awk '{print $1}')" | ||
echo | echo 'Assurez-vous que votre cd est assez grand' | ||
echo | echo 'On y va? (O/N)' | ||
read CHOIX | read CHOIX | ||
case $CHOIX in | 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 | 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 240 : | Ligne 236 : | ||
break | break | ||
;; | ;; | ||
* ) echo | * ) echo 'Veuillez entrer un choix valide' ;; | ||
esac | esac | ||
done | done | ||
} | } | ||
echo | echo ' |//' | ||
echo | echo ' (o o)' | ||
echo | echo '+-------------oOO----(_)---------------------+' | ||
echo | echo '|--------------------------------------------|' | ||
echo | echo '|---------------- ¤ BONJOUR ! ¤ -------------|' | ||
echo | echo '|----- ¤ Ce Script va vous permettre ¤ ------|' | ||
echo | echo '|--------- ¤ de graver facilement ¤ ---------|' | ||
echo | echo '|-------------- ¤ vos données ¤ -------------|' | ||
echo | echo '+--------------------oOO---------------------+' | ||
echo | echo ' |__|__|' | ||
echo | echo ' || ||' | ||
echo | echo ' ooO Ooo' | ||
echo " \n \n \n " | echo " \n \n \n " | ||
Ligne 273 : | Ligne 269 : | ||
2 ) grave_iso_ ;; | 2 ) grave_iso_ ;; | ||
3 ) efface_disque_ ;; | 3 ) efface_disque_ ;; | ||
0 ) | 0 ) | ||
echo | echo ' | ||
''~'' | ''~'' | ||
( o o ) | ( o o ) | ||
Ligne 285 : | Ligne 281 : | ||
\_) ) / | \_) ) / | ||
(_/ | (_/ | ||
' | |||
exit 2 | exit 2 | ||
;; | ;; | ||
* ) echo | * ) echo 'Veuillez entrer un choix valide' ;; | ||
esac | esac | ||
done | done | ||
Ligne 294 : | Ligne 290 : | ||
exit 0 | exit 0 | ||
</ | </syntaxhighlight> | ||
[[Category:Scripts]] | [[Category:Scripts]] |
Dernière version du 15 février 2017 à 09:29
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.
#!/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
}
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