Conseil pour un script bash.

Le
Dominique
Bonjour,
Je roule beaucoup (environ 3 h/jour) et je charge sur le net
(http://www.litteratureaudio.com/) des livres audio que je place sur une
clef USB.

Une fois dézippés, les chapitres se présentent de la façon suivante :

nom_du_livre_nom_de_l_auteur_chap_01.mp3
._chap_02.mp3
etc.

Ma clef ne sait pas classer les chapitre par ordre numérique. À la main,
je fais donc laborieusement :

mv -v *01* aa.mp3
mv -v *02* ab.mp3 etc

Ma clef classe alors correctement :
aa.mp3
ab.mp3

az.mp3
ba.mp3
etc

Je suis sûr qu'avec un bout de script, il doit être possible de ne
récupérer que les 6 derniers caractères d'un nom de fichier (01.mp3,
02.mp3) puis de remplacer le 0 par a, le 1 par b etc sans toucher
bien sûr au 3 de mp3.

Je pense que côté « saucissonnage » du problème, je ne dois pas être
loin de la solution mais je ne sais pas bâtir le script.
Pourriez-vous m'aider ?

Merci et très bonne journée à tous,

--
Dominique
Esto quod es
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien LE LEZ
Le #18538441
On Sat, 31 Jan 2009 06:56:14 +0100, Dominique
À la main,
je fais donc laborieusement :

mv -v *01* aa.mp3
mv -v *02* ab.mp3 etc...



Tu peux déjà mettre ces lignes dans un script bash, ce sera un
début...
Alain Montfranc
Le #18538521
Dominique a écrit
Bonjour,
Je roule beaucoup (environ 3 h/jour) et je charge sur le net
(http://www.litteratureaudio.com/) des livres audio que je place sur une clef
USB.

Une fois dézippés, les chapitres se présentent de la façon suivante :

nom_du_livre_nom_de_l_auteur_chap_01.mp3
............................_chap_02.mp3
etc.

Ma clef ne sait pas classer les chapitre par ordre numérique. À la main, je
fais donc laborieusement :

mv -v *01* aa.mp3
mv -v *02* ab.mp3 etc...

Ma clef classe alors correctement :
aa.mp3
ab.mp3
...
az.mp3
ba.mp3
etc...

Je suis sûr qu'avec un bout de script, il doit être possible de ne récupérer
que les 6 derniers caractères d'un nom de fichier (01.mp3, 02.mp3...) puis de
remplacer le 0 par a, le 1 par b etc sans toucher bien sûr au 3 de mp3.

Je pense que côté « saucissonnage » du problème, je ne dois pas être loin de
la solution mais je ne sais pas bâtir le script.
Pourriez-vous m'aider ?

Merci et très bonne journée à tous,



#!/bin/sh

for file in *chap_[0-9]*.mp3
do
BASE=`echo $file | sed 's/[0-9]*.mp3//'`
NUM=`echo $file | sed 's/.*_([0-9]*).mp3/1/'`
LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`
mv $file "$BASE""$LETTERS"".mp3"
done

T'irais ?

Sinon ca m'interesse... Tu les recupers ou ces mp3 ?
Dominique
Le #18538771
Alain Montfranc a écrit :

#!/bin/sh

for file in *chap_[0-9]*.mp3
do
BASE=`echo $file | sed 's/[0-9]*.mp3//'`
NUM=`echo $file | sed 's/.*_([0-9]*).mp3/1/'`
LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`
mv $file "$BASE""$LETTERS"".mp3"
done

T'irais ?

Sinon ca m'interesse... Tu les recupers ou ces mp3 ?





Je les trouve sur ce site :
http://www.litteratureaudio.com/

J'ai corrigé un peu ton script dont je te remercie car la structure est
en réalité de la forme Chap[0-9] et non chap_[0-9]

Je n'obtiens pas tout-à-fait ce qu'il me faut. en effet, le fichier :
Gaston_Leroux_-_Le_fantome_de_l_Opera_Chap01.mp3
devient :
Gaston_Leroux_-_Le_fantome_de_l_Opera_ChapGaston_Leroux_-_Le_fantome_de_l_Opera_Chapab.mpd.mp3

Le « titre » est répété et l'extension mp3 est transformée en mpd.mp3
Idéalement, ce premier chapitre devrait simplement devenir : aa.mp3
suivi de ab.mp3 etc.

Comme je ne dois pas être plus stupide qu'un autre et que je devrais
bien finir par comprendre comment tournent ces scripts (pitié pour mes
50 balais bien sonnés...), pourrais-tu me décomposer ton script en
lignes de commande successives afin que je comprennes bien sa syntaxe ?
En effet, j'ai essayé de passer les lignes une par une mais... le
résultat escompté n'est pas celui obtenu... Notamment, je suis toujours
en attente avec le signe >
Je te remercie,

--
Dominique
Esto quod es
Dominique
Le #18538761
Fabien LE LEZ a écrit :
On Sat, 31 Jan 2009 06:56:14 +0100, Dominique
À la main,
je fais donc laborieusement :

mv -v *01* aa.mp3
mv -v *02* ab.mp3 etc...



Tu peux déjà mettre ces lignes dans un script bash, ce sera un
début...



Certes, j'y ai bien pensé mais si j'ai 30 ou 40 chapitres, la rédaction
du script va rapidement devenir laborieuse. Et je suppose qu'il y a des
solutions plus élégantes avec les expressions régulières.
Bonne journée,
--
Dominique
Esto quod es
Alain Montfranc
Le #18539461
Dominique a écrit
Alain Montfranc a écrit :

#!/bin/sh

for file in *chap_[0-9]*.mp3
do
BASE=`echo $file | sed 's/[0-9]*.mp3//'`
NUM=`echo $file | sed 's/.*_([0-9]*).mp3/1/'`
LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`
mv $file "$BASE""$LETTERS"".mp3"
done

T'irais ?

Sinon ca m'interesse... Tu les recupers ou ces mp3 ?





Je les trouve sur ce site :
http://www.litteratureaudio.com/

J'ai corrigé un peu ton script dont je te remercie car la structure est en
réalité de la forme Chap[0-9] et non chap_[0-9]

Je n'obtiens pas tout-à-fait ce qu'il me faut. en effet, le fichier :
Gaston_Leroux_-_Le_fantome_de_l_Opera_Chap01.mp3
devient :
Gaston_Leroux_-_Le_fantome_de_l_Opera_ChapGaston_Leroux_-_Le_fantome_de_l_Opera_Chapab.mpd.mp3

Le « titre » est répété et l'extension mp3 est transformée en mpd.mp3
Idéalement, ce premier chapitre devrait simplement devenir : aa.mp3 suivi de
ab.mp3 etc.

Comme je ne dois pas être plus stupide qu'un autre et que je devrais bien
finir par comprendre comment tournent ces scripts (pitié pour mes 50 balais
bien sonnés...), pourrais-tu me décomposer ton script en lignes de commande
successives afin que je comprennes bien sa syntaxe ?
En effet, j'ai essayé de passer les lignes une par une mais... le résultat
escompté n'est pas celui obtenu... Notamment, je suis toujours en attente
avec le signe >
Je te remercie,



#!/bin/sh

for file in *_Chap[0-9]*.mp3
do
NUM=`echo $file | sed 's/.*_Chap([0-9]*).mp3/1/'`
LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`
mv $file "$LETTERS"".mp3"
done

Merci poor le lien
Dominique
Le #18540411
Alain Montfranc a écrit :


#!/bin/sh

for file in *_Chap[0-9]*.mp3
do
NUM=`echo $file | sed 's/.*_Chap([0-9]*).mp3/1/'`
LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`
mv $file "$LETTERS"".mp3"
done




Excellent !
Peux-tu m'expliquer comment est construit ton script ?
je te remercie.
bonne journée,

--
Dominique
Esto quod es
Alain Montfranc
Le #18542051
Dominique a écrit
Alain Montfranc a écrit :


#!/bin/sh

for file in *_Chap[0-9]*.mp3





Pour tous les fichiers qui matchent

do
NUM=`echo $file | sed 's/.*_Chap([0-9]*).mp3/1/'`




Je recupere le NUMero en prenant la sequence de 0-9 apres _Chap et
avant .mp3 ((...) correspond au 1 dans l expression de substitution

LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`




Je transforme les chiffres en lettres 0=>a 1=>b etc...

mv $file "$LETTERS"".mp3"




Je renomme le fichier

done




Excellent !
Peux-tu m'expliquer comment est construit ton script ?
je te remercie.
bonne journée,


Dominique
Le #18544111
Alain Montfranc a écrit :
Dominique a écrit
Alain Montfranc a écrit :


#!/bin/sh

for file in *_Chap[0-9]*.mp3





Pour tous les fichiers qui matchent

do
NUM=`echo $file | sed 's/.*_Chap([0-9]*).mp3/1/'`




Je recupere le NUMero en prenant la sequence de 0-9 apres _Chap et avant
.mp3 ((...) correspond au 1 dans l expression de substitution

LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`




Je transforme les chiffres en lettres 0=>a 1=>b etc...

mv $file "$LETTERS"".mp3"




Je renomme le fichier

done




Excellent !
Peux-tu m'expliquer comment est construit ton script ?
je te remercie.
bonne journée,








Merci. Serait-il possible de reproduire ces comportements en ligne de
commande pour observer les différents effets ?
Bonne soirée,
--
Dominique
Esto quod es
Fabien LE LEZ
Le #18544261
On Sat, 31 Jan 2009 18:42:52 +0100, Dominique
Serait-il possible de reproduire ces comportements en ligne de
commande



Que veux-tu dire ?
Un script bash dans sa forme la plus simple (comme c'est le cas ici),
ce n'est jamais qu'un fichier contenant des commandes, ce qui t'évite
de les re-taper à chaque fois. Lancer ce fichier ou copier-coller les
lignes en question dans un shell, c'est la même chose.
Alain Montfranc
Le #18544251
Dominique a écrit
Alain Montfranc a écrit :
Dominique a écrit
Alain Montfranc a écrit :


#!/bin/sh

for file in *_Chap[0-9]*.mp3





Pour tous les fichiers qui matchent

do
NUM=`echo $file | sed 's/.*_Chap([0-9]*).mp3/1/'`




Je recupere le NUMero en prenant la sequence de 0-9 apres _Chap et avant
.mp3 ((...) correspond au 1 dans l expression de substitution

LETTERS=`echo "$NUM" | tr '[0-9]' '[a-j]'`




Je transforme les chiffres en lettres 0=>a 1=>b etc...

mv $file "$LETTERS"".mp3"




Je renomme le fichier

done




Excellent !
Peux-tu m'expliquer comment est construit ton script ?
je te remercie.
bonne journée,








Merci. Serait-il possible de reproduire ces comportements en ligne de
commande pour observer les différents effets ?
Bonne soirée,



Tu fais :file="le nom d'un des fichiers" et tu pourras executer la
suite (entre le do et le done) en step by step

Les commande XXX=`blah blah` affectent le resultat de la commande vlah
blah à la variable XXX. Tu px donc executer blah blah en interactif
puis stocker le resultat dans la variable "pour voir"
Publicité
Poster une réponse
Anonyme