Vous n'êtes pas identifié(e).
... ce qui crée le fichier en le renommant avec l'extention "mp3"
D'autre part j'ai fait aussi une commande pour créer des répertoires vides correspondants à toute la série contenant les fichiers wav à encoder.
Les répertoires vides correspondants ainsi créés prennent le même nom que ceux d'origine avec un rajout de "-mp3" à la fin.
Voici la commande:
Jusque là ces deux commandes fonctionnent bien individuellement. Script-newbie est très fier
J'ai environ 70 répertoires contenant les wav
Mon problème concerne des boucles imbriquées qui permettraient de:
1. prendre le répertoire A (wav)
2. créer son compagnon (mp3) correspondant (commande citée plus haut)
2. se placer dans le répertoire A (wav)
3. encoder les wav en mp3 dans A en les renommant (commande citée plus haut)
4. les déplacer (fichiers générés mp3) dans le répertoire compagnon
5. prendre suivant (repertoire wav B) et refaire cet algorithme ...etc...
J'avais fait aussi deux fonctions avec une boucle while et des for et j'ai trouvé le moyen de dupliquer et renommer des centaines de répertoires dans mon home. Heureusement j'ai pu effacer les dégats grâce à l'affichage par date
Les fonctions sont:
Si vous avez lu jusque là, vous avez deviné que je suis au bout de mes compétences et que mon obstination à faire ces fameuses boucles a atteint ses limites. Sans solution je referai ce que j'ai déjà fait avec twolame à la main, répertoire après répertoire, mais dont le format n'est pas compatible avec mes lecteurs externes (tout est à recommencer).
Une meilleure idée est aussi la bienvenue
Dernière modification par Franz (23-10-2012 14:58:37)
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
il faudra donc insérer cette fonction dans une boucle :
Il te reste à savoir comment faire pour avoir la <liste_de_répertoires>…
Hors ligne
Est-ce que tu connais ce genre de truc ? Excuse-moi pour les bla bla
J'ai trouvé ça aussi
Ce genre de code peut-il se substituer (ou se rajouter) à la boucle for que tu proposes sans avoir besoin de vraie liste ?
Dernière modification par Franz (23-10-2012 17:33:29)
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
Avec cette manière de faire on peut modifier la façon de créer le répertoires des mp3 en donnant le nom du répertoire à faire_le_boulot. Cependant ça implique que chemin-de-répertoires soit donné en absolu à find… je te laisse imaginer comment faire les modifications nécessaires.
Sinon, cette façon de faire est parfaite.
Il y a une autre façon, qui est moins bien dans le cas où il y a beaucoup de répertoire mais qui présente d'autres avantages. La voici :
Voilà, je pense que ton problème est résolu.
Aussi, tu ferais bien d'ajouter les lignes qui sont valables pour bash mais pas pour dash :
Le set -u permet de traiter comme une erreur les variables qui sont utilisées sans avoir été définies. Le set -e permet d'arrêter le script dès qu'un programme à un code de retour non nul. C'est une sécurité quand on teste.
Hors ligne
Dernière modification par Franz (23-10-2012 17:40:14)
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
Dernière modification par Franz (24-10-2012 12:02:10)
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
en supposant que ton script s'appelle mon-script.sh
Ensuite pour l'exécuter :
En attendant de voir ton script, je ne peux pas mieux te proposer.
Hors ligne
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
Un éditeur qui retourne les erreurs serait l'idéal
Pour cela, j'utilise vim-nox.
voir le tuto :
vim-nox
saque eud dun (patois chtimi : fonce dedans)
Hors ligne
Hors ligne
Dernière modification par Franz (24-10-2012 19:16:43)
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
il faut mettre un fichier wav dans le répertoire principal pour que ça fonctionne sinon fermeture du terminal au début.
J'ai l'impression que tu lances ce script depuis un gestionnaire de fichiers. Le moyen le plus pratique est de lancer un terminal et de lancer ton script depuis ce terminal. De cette façon tu n'auras pas besoin de tous ces « read ». Le terminal ne se fermera pas.
Ça te permettra de voir aussi les éventuels messages d'erreurs.
Autre chose ; tu n'as pas besoin d'écrire :
pour avoir une nouvelle ligne. Il suffit d'écrire :
Et une dernière sur le style. Dans un script il est préférable d'écrire des boucles entières sur une seule ligne. Dans la fonction encoder :
Il est plus clair d'écrire :
Tu peux même mettre le do sur une nouvelle ligne en dessous du for.
Bon, je vais tester ton script… je te tiens au courant.
Hors ligne
find va te lister tous les répertoires contenu dans "$PWD", y compris lui même.
Et ce que tu veux c'est ne prendre en compte que les sous répertoires de "$PWD".
Pour circonvenir à ce problème deux solutions me viennent à l'esprit.
1) Dire à find de en prendre en compte que les répertoires à partir d'une profondeur de 1 (la profondeur 0 étant le répertoire de base $PWD).
pour cela il suffit de rajouter une option à find :
On peut même ne traiter que les sous répertoires du premier niveau :
Une autre solution (moins bonne) est de tester si le répertoire "$d" est égale à "$PWD".
Ce qui nous donne :
« continue » dans une boucle permet de passer à la prochaine itération.
Et enfin pour tester si un fichier existe, on peut procéder ainsi :
Et pour tester si il y a un fichier de la *.wav dans le répertoire courant, j'utilise la fonction :
Remarques bien que pour le shell la valeur vraie est 0, et toutes autres valeurs est fausses !
Elle s'utilise comme ceci :
ou comme ceci :
le ! (point d'exclamation) permet d'inverser la valeur vraie en faux, et vice versa.
Voilà, tu as tout les ingrédients nécessaires.
Hors ligne
Bonne soirée à tous .
Dernière modification par Franz (30-10-2012 11:24:01)
Vieux processeur amd sempron 3000+ cadencé à 2 Gz
Hors ligne
Je suis confus de voir à quel point tu te décarcasses pour mon script. Un grand merci !
Je t'en prie. C'est intéressant de faire découvrir la programmation en shell à un débutant, donc ne t'inquiète pas pour moi.
Aussi, j'ai réorganisé ton script pour y voir plus clair, tu peux récupérer celui-ci ici :wav2mp3.bash
wav2mp3.bash
J'ai pris la liberté de supprimer la plupart des commentaires et j'ai modifié quelques petites choses. Parmi celles-ci j'ai organisé ton script pour n'avoir qu'une seule commande par ligne. C'est plus facile à lire.
J'en arrive au point le plus important. Pour détecter si tu as un fichier avec l'extension .wav ta méthode n'est pas la bonne.
En effet, tu parcours tous les fichiers de la forme *.* est tu prend leur extension. Et tu positionnes la variable $extension sur l'extension trouvé. Mais si il y avait dans l'un de tes répertoires un fichier qui n'aurait pas l'extension .wav et qu'il soit traité en dernier, les fichiers .wav de ce répertoire ne seraient pas traités…
Je te propose donc la méthode suivante qui consiste à sortir de la première boucle dès que tu détecte un fichier .wav.
Voilà, tu as maintenant plusieurs façons de résoudre le problème qui consiste à savoir s'il y a des fichiers .wav ou pas.
Donc à la sortie de cette boucle la variable $wav_ok vaut 1 si il existe un fichier .wav dans le répertoire. Et donc la suite est :
Remarques que j'ai supprimé le continue que tu avais mis. Il est inutile et peut même source de problème (car le « cd - » n'est pas exécuté, ce qui ne pose pas de problèmes dans ton cas car les répertoires sont en absolus). Tu peux adopter celle qui te convient le mieux
Dernière modification par enicar (26-10-2012 11:03:43)
Hors ligne