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

2 réponses

1 2
Avatar
Alain Montfranc
Fabien LE LEZ a écrit
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.



Oui mais le "while/do/done" s'execute d'un coup. Lui il a envie de voir
en pas par pas ;-)
Avatar
Alain Montfranc
Alain Montfranc a écrit
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"



Tu peux aussi faire :

sh -x monscript

ou monscript est le fichier qui contient le script en question
1 2