Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conseil pour un script bash.

12 réponses
Avatar
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

10 réponses

1 2
Avatar
Fabien LE LEZ
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...
Avatar
Alain Montfranc
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 ?
Avatar
Dominique
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
Avatar
Dominique
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
Avatar
Alain Montfranc
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
Avatar
Dominique
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
Avatar
Alain Montfranc
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,


Avatar
Dominique
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
Avatar
Fabien LE LEZ
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.
Avatar
Alain Montfranc
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"
1 2