#1 Le 07/12/2007, à 19:18
- Autiwa
[script Bash] Lister artiste, albums et chansons
Je voulais me faire un script pour lister les artistes, puis afficher leurs albums, ainsi que les chansons de ces albums de manière automatique, avec une mise en page rudimentaire qui aurait été de ce style :
====================================
Dido
====================================
** Dido - Live 06-2005 **
piste 1
piste 2
piste 3
** Life For Rent **
piste 1
piste 2
piste 3
====================================
Autre artiste
====================================
#et ainsi de suite
Je souhaite aussi que les artiste, albums et titres, soient dans l'ordre alphabétique.
J'ai commencé un script mais j'y connais pas grand chose, alors ça ne fonctionne pas, et je ne comprends pas pourquoi. Par contre, je me doute un peu que l'erreur ne doit pas être seule. J'ai essayé un ls à la place du find, mais le résultat ne semblait pas par ordre alphabétique...
Ci dessous, voici le code de mon script.
#!/bin/bash
#version 0.1
#TODO stocker les echo dans un fichier texte
i=0
for artiste in $(find -type d -maxdepth 1)
do
echo "debug debut du premier for $artiste"
if [ $artiste != "." ]#on veut éliminer la première ligne du find
then
art[$i]=${$artiste#./} #on stocke le nom de l'artiste en enlevant le ./ du début
echo ${$art[$i]}
cd ${$art[$i]} #on se déplace dans le répertoire de l'artiste
j=0 #initialisation de la variable j qui va servir pour la seconde boucle
#on affiche le nom de l'artiste en mettant en forme
echo "===================================="
echo ${$art[$i]}
echo "===================================="
echo
for album in $(find -type d -maxdepth 1)
do
alb[$j]=${$album#./}#on stocke le nom de l'album courant dans un tableau
echo ** ${$alb[$j]} **#on affiche le nom du répertoire courant
cd ${$alb[$j]}#on se place dans le répertoire courant
ls -1 #on affiche la liste des chansons du répertoire courant, j'aimerais bien d'ailleurs ne mettre que les fichiers .mp3 et pas les autres
echo #une ligne d'espacement pour séparer les albums
((j++))
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
fi
echo #une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done
J'ai eu un soucis avec le fait qu'il me renvoyait, parmi les résultats, la racine du dossier que je voulait lister. L'autre soucis, c'est qu'en début de chaque dossier, j'ai "./"
Si quelqu'un peut jeter un coup d'oeil s'il a le temps et l'envie. Mon script doit pas être très intéressant à regarder, c'est de la bête navigation dans les dossiers, mais bon, c'est encore trop pour moi.
Si vous avez une super doc avec exemple, commande utiles et cie sur la création de script plus ou moins compliqués, je prend aussi, j'ai regardé sur le net, mais je me suis un peu paumé, et mon navigateur devrait pas tarder à planter tellement j'ai de pages ouvertes
Si vous avez aussi des scripts qui ressemblent fortement à ce que je souhaite, je prend aussi, ça m'aidera à comprendre ce qui cloche dans le mien.
Merci d'avance à tout ceux qui utiliseront un peu de leur temps pour m'aider.
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#2 Le 07/12/2007, à 19:46
- freebird
Re : [script Bash] Lister artiste, albums et chansons
Je ne comprend pas l'intérêt de stocker dans un tableau ton nom d'album et d'artiste vu que tu ne t'en sers pas, un besoin futur ?
Pour le ls, il suffit de faire
ls -1 *.mp3 *.MP3 2>/dev/null
et tu n'auras que les mp3.
Pour éviter ton if pour virer . tu peux mettre ça comme find
find . -type d -mindepth 1 -maxdepth 1 | sed -e 's,^\./,,'
Le sed te permet de virer le ./ que tu as au début.
Dernière modification par freebird (Le 07/12/2007, à 19:46)
Hors ligne
#3 Le 07/12/2007, à 19:53
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
merci pour cette réponse rapide, ça devrait simplifier un peu le script. Même si je pense qu'il ne s'exécutera toujours pas correctement
Si j'ai stocké les valeurs dans un tableau, c'est qu'au départ, je crééait la liste à la fin. Mais avec tes commandes, je pourrais certainement faire un truc plus propre, éviter les manipulations de chaines et afficher tout d'un coup. Après, faudra que j'essaye de stocker les "echo" dans un fichier, je pense qu'il doit falloir simplement créer un fichier en début de script, et remplacer tout les echo par une autre commande qui signifierait "affiche dans le fichier texte"
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#4 Le 07/12/2007, à 20:23
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
Je viens de modifier, j'ai enlevé les tableaux qui ne servaient finalement à rien. Le code est plus petit, et il me semble plus clair.
Par contre, j'ai l'impression que ta commande ls me met tout les fichiers à la suite alors que j'aimerais une ligne par fichier.
De plus, il semble que les dossiers ayant des espaces sont traités mot par mot, ce qui est assez facheux finalement.
#!/bin/bash
#version 0.11
#TODO stocker les echo dans un fichier texte
for artiste in $(find $PWD -type d -mindepth 1 -maxdepth 1 | sed -e 's,^\./,,')
do
echo $artiste
cd $artiste #on se déplace dans le répertoire de l'artiste
#on affiche le nom de l'artiste en mettant en forme
echo "===================================="
echo $artiste
echo "===================================="
echo
for album in $(find $PWD -type d -mindepth 1 -maxdepth 1 | sed -e 's,^\./,,')
do
echo ** $album ** #on affiche le nom du répertoire courant
cd $album #on se place dans le répertoire courant
ls -1 *.mp3 *.MP3 2>/dev/null #on affiche la liste des chansons du répertoire courant, j'aimerais bien d'ailleurs ne mettre que les fichiers .mp3 et pas les autres
echo #une ligne d'espacement pour séparer les albums
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
echo #une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#5 Le 07/12/2007, à 20:44
- freebird
Re : [script Bash] Lister artiste, albums et chansons
Essaye ça :
#!/bin/bash
#version 0.11
#TODO stocker les echo dans un fichier texte
find . -type d -mindepth 1 -maxdepth 1 2>/dev/null| sed -e 's,^\./,,' | while read artiste
do
cd "${artiste}" #on se déplace dans le répertoire de l'artiste
#on affiche le nom de l'artiste en mettant en forme
echo "===================================="
echo "${artiste}"
echo "===================================="
echo
find . -type d -mindepth 1 -maxdepth 1 2>/dev/null | sed -e 's,^\./,,' | while read album
do
echo "** ${album} **" #on affiche le nom du répertoire courant
cd "${album}" #on se place dans le répertoire courant
ls -1 *.mp3 *.MP3 2>/dev/null
echo #une ligne d'espacement pour séparer les albums
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
echo #une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done
Si ça fonctionne je t'explique les modifs.
Dernière modification par freebird (Le 07/12/2007, à 20:44)
Hors ligne
#6 Le 07/12/2007, à 21:06
- Alain.g
Re : [script Bash] Lister artiste, albums et chansons
Salut
Pour éviter les problèmes avec les espaces, on peut soit utiliser les guillemets comme freebird, soit changer la valeur de d'IFS (ce que tu peux faire si tu souhaites garder la structure de ton script)
Avec juste find, ça ne sera pas classé par ordre. Il faut le combiner avec "sort" (find |sort )
Ceci dit il y a plus simple, c'est d'utiliser ls -d */ puis d'effacer le / final (avec tr par exemple)
Voici ton script avec juste ces deux modifications (ainsi que des guillement autour de *** $album ***). Je n'ai pas pris la peine d'effacer tes commentaires
#!/bin/bash
#version 0.11
#TODO stocker les echo dans un fichier texte
IFS=$'\n'
for artiste in $(ls -d */ | tr -d /)
do
echo $artiste
cd $artiste #on se déplace dans le répertoire de l'artiste
#on affiche le nom de l'artiste en mettant en forme
echo "===================================="
echo $artiste
echo "===================================="
echo
for album in $(ls -d */ | tr -d /)
do
echo "** $album **" #on affiche le nom du répertoire courant
cd $album #on se place dans le répertoire courant
ls -1 *.mp3 *.MP3 2>/dev/null #on affiche la liste des chansons du répertoire courant, j'aimerais bien d'ailleurs ne mettre que les fichiers .mp3 et pas les autres
echo #une ligne d'espacement pour séparer les albums
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
echo #une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done
Dernière modification par Alain.g (Le 07/12/2007, à 21:18)
Xubuntu Karmic !
Hors ligne
#7 Le 07/12/2007, à 21:09
- freebird
Re : [script Bash] Lister artiste, albums et chansons
Je ne connaissais pas IFS et c'est bien pratique, c'est un spécifique bash ?
Hors ligne
#8 Le 07/12/2007, à 21:14
- Alain.g
Re : [script Bash] Lister artiste, albums et chansons
Non, mais en /bin/sh, il faudrait le rédiger comme ceci :
IFS="
"
(ce qui fonctionnerait également en bash)
et non comme je l'ai fait (IFS=$'\n')
Xubuntu Karmic !
Hors ligne
#9 Le 07/12/2007, à 21:39
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
J'ai essayé les deux scripts, qui marchent sans problèmes. J'avoue que j'ai une préférence pour celui de freebird vu que je comprends pas trop l'histoire de l'IFS
Je vous remercie tout les deux pour votre aide. Maintenant que le script marche, freebird, tu voudrais bien m'expliquer les changements si tu en as envie? (si je me permet de demander, c'est parce que tu évoquais la possibilité de m'expliquer dans un précédent post) J'ose pas demander pour IFS, vu qu'il faut d'abord que je me documente par moi même, mais toute explication est bien entendue la bienvenue aussi
Il y a cependant une remarque importante qui me vient. Dans le script de freebird (et donc la faute me revient) il m'est difficile d'interrompre le script avec Ctrl+C, alors que c'est quasi-instantané avec celui d'Alain.g
J'ai modifié pour qu'il ne m'affiche pas l'extension des fichiers. Le code final est le suivant :
#!/bin/bash
#version 0.2
#larges contributions de freebird et Alain.g
#TODO stocker les echo dans un fichier texte
IFS=$'\n'
for artiste in $(ls -d */ | tr -d /)
do
cd $artiste #on se déplace dans le répertoire de l'artiste
#on affiche le nom de l'artiste en mettant en forme
echo "===================================="
echo $artiste
echo "===================================="
echo
for album in $(ls -d */ | tr -d /)
do
echo "** $album **" #on affiche le nom du répertoire courant
cd $album #on se place dans le répertoire courant
ls -1 *.mp3 *.MP3 2>/dev/null|tr -d .mp3 #on affiche la liste des chansons du répertoire courant, j'aimerais bien d'ailleurs ne mettre que les fichiers .mp3 et pas les autres
echo #une ligne d'espacement pour séparer les albums
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
echo #une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done
Il reste une chose que je ne comprends pas. Bien entendu, ça concerne la minuscule et infime partie de code que j'ai rajouté à un script qui fonctionnait... J'ai voulu enlever l'extension, mais au lieu de ça, il a enlevé tout les "p", les "m" et les "3"
Dernière modification par Autiwa (Le 07/12/2007, à 21:49)
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#10 Le 07/12/2007, à 22:18
- freebird
Re : [script Bash] Lister artiste, albums et chansons
Alors je te propose 2 trucs pour virer le .mp3.
Si tu n'as que des fichiers avec une extension en minuscule :
ls *.mp3 | sed -e 's/\.mp3$//'
Si tu as des fichiers avec une extension avec majuscule et/ou minuscule :
ls *.mp3 *.MP3 2>/dev/null| sed -e 's/\.[M|m][P|p]3$//'
Pour l'interruption ça vient du find et du while ^^
Si tu veux limiter le temps de traitement pour tes tests ajoute " head | " juste avant le premier while pour prendre uniquement les 10 premiers artistes
Hors ligne
#11 Le 07/12/2007, à 22:22
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
génial, tu me sauve. J'étais justement en train de regarder sed, vu que je voulais manipuler pour virer la chaine de caractère. Mais je comprenais rien aux docs. Bon ben le script est fini je crois, et j'ai rien programmé... :S espérons que le prochain, je sois plus rentable.
Et pour les extensions oui, j'ai que du minuscule, je suis un maniaque, je repasse à chaque fois tout mes dossiers pour mettre toutes les extensions en minuscules(avec metamorphose hein, pas à la main). je déteste les extensions en majuscules...
[edit]
J'ai corrigé ta ligne de commande, j'avais une erreur à l'exécution. J'ai donc simplement repris la ligne qui marchait déjà , en rajoutant le pipe avec sed
ls -1 *.mp3 2>/dev/null| sed -e 's/\.mp3$//'
[/edit]
Dernière modification par Autiwa (Le 07/12/2007, à 22:31)
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#12 Le 07/12/2007, à 23:03
- freebird
Re : [script Bash] Lister artiste, albums et chansons
La commande sed permet de faire beaucoup de choses dont la substitution. Substitution qui est assez simple à réaliser une fois que tu as saisi le principe. Si tu veux une explication du sed utilisé ici ça peut se faire
Dernière modification par freebird (Le 07/12/2007, à 23:03)
Hors ligne
#13 Le 07/12/2007, à 23:06
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
j'aimerais pas abuser des bonnes choses, mais je veux bien. ça fait déjà deux fois que j'essaye de comprendre et deux fois que j'y laisse quelques molaires...
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#14 Le 07/12/2007, à 23:18
- Alain.g
Re : [script Bash] Lister artiste, albums et chansons
sed -e 's/\.[M|m][P|p]3$//'
Petite précision même si ce n'est pas utile ici puisqu'il n'y a pas d'extension en majuscule.
Gnu sed possède le modificateur I qui rend insensible à la case.
donc on pourrait faire simplement :
sed 's/\.mp3$//I'
Sinon [M|m] signifie que le caractère est soit le "M", le "|" ou le "m".
Il serait donc plus correct d'écrire : \.[Mm][Pp]3$
ou bien éventuellement \.\(MP\|mp\)3$
Mais tant qu'on a Gnu Sed, comme sous Ubuntu, on n'a pas à s'embêter.
Pour l'IFS, cela signifie "Internal Field Separator". Par défaut les séparateurs sont les espaces blancs (espace, saut de lign, tabulation). Donc là on définit le saut de ligne comme le seul caractère séparateur.
Changer la valeur de l'IFS est aussi intéressant si les champs sont séparés par un certain caractère, comme ":" ";" "," etc...
exemple :
a=a,b,c ; IFS=, ; for i in $a ; do echo $i ; done
Dernière modification par Alain.g (Le 07/12/2007, à 23:29)
Xubuntu Karmic !
Hors ligne
#15 Le 07/12/2007, à 23:27
- freebird
Re : [script Bash] Lister artiste, albums et chansons
La syntaxe de la commande substitution est la suivante :
sed -e 's<séparateur><chaà®ne à remplacer><séparateur><chaà®ne remplaçante><séparateur><options>'
séparateur : ici j'ai utilisé le caractère / par habitude, ça fonctionnerait tout aussi bien avec , ou ; etc...
chaà®ne à remplacer : ici j'ai utilisé \.mp3$.
.mp3 c'est l'extension que l'on veut enlever.
$ permet de dire que je ne veux enlever que le .mp3 final ce qui évite de supprimer autre chose que l'extension. Imaginons un fichier nommé 'coucou.mp3 par titi.mp3' si tu ne mets pas le $ tu vas remplacer par 'coucou par titi.mp3' au lieu de 'coucou.mp3 par titi'
dans sed le caractère . étant un caractère joker il faut annuler son interprétation avec un \
chaà®ne remplaçante : ici on veut effacer donc je n'ai rien mis
options : ici on n'en a pas besoin donc je n'en ai pas mis.
Pour d'autres utilisation à venir, les options que j'utilise le plus souvent sont :
- un chiffre : pour dire je veux remplacer l'occurrence x
- un g : pour dire je veux remplacer toutes les occurrences
Je ne sais pas si j'ai été assez clair
alain.g, je ne suis pas coutumier des syntaxes Gnu donc je ne connais pas toutes les subtilités. De plus j'ai pour habitude de coder des scripts multi-plateforme (Sun/AIX/HP-UX) donc je me suis habitué à utiliser des syntaxes un peu passe-partout
Dernière modification par freebird (Le 07/12/2007, à 23:30)
Hors ligne
#16 Le 07/12/2007, à 23:32
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
J'ai plus appris en 10 minutes qu'en une demi-journée
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#17 Le 07/12/2007, à 23:57
- freebird
Re : [script Bash] Lister artiste, albums et chansons
ça fait 10 ans que je code du shell et j'en apprend encore presque à chaque fois que j'en fais
Hors ligne
#18 Le 08/12/2007, à 14:33
- skt310
Re : [script Bash] Lister artiste, albums et chansons
@freebird: tout simplement la meilleure explication de sed que j'aie jamais vue . (c'est la première que je comprend.). J'ai juste pas trop compris l'option "g".
(désolé de m'incruster).
[edit] c'est bon j'ai compris
Dernière modification par skt310 (Le 08/12/2007, à 15:34)
NOVATUX : Besoin d'un ordinateur parfaitement compatible avec linux, un très bon contact avec le vendeur, des conseils, une instalation personalisée. Bref que du bonheur quoi. Allez voir ce site! J'ai acheté mon portable ici et vraiment c'est un plaisir!
Hors ligne
#19 Le 09/12/2007, à 17:54
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
nouvelle idée, donc nouveau bug. J'ai voulu stocker le texte directement dans un fichier .txt, et là , il aime pas du tout :
#!/bin/bash
#version 0.21
#larges contributions de freebird et Alain.g
#TODO stocker les echo dans un fichier texte
#TODO format latex et/ou html
IFS=$'\n'
cd $1
echo "Listes des musiques" > $1/musiques.txt
for artiste in $(ls -d */ | tr -d /)
do
cd $artiste #on se déplace dans le répertoire de l'artiste
#on affiche le nom de l'artiste en mettant en forme
echo "====================================" >> $1/musiques.txt
echo $artiste >> $1/musiques.txt
echo "====================================" >> $1/musiques.txt
echo "\n" >> $1/musiques.txt
for album in $(ls -d */ | tr -d /)
do
echo "** $album **" >> $1/musiques.txt #on affiche le nom du répertoire courant
cd $album #on se place dans le répertoire courant
ls -1 *.mp3 2>/dev/null| sed -e 's/\.mp3$//' >> $1/musiques.txt #on affiche la liste des chansons du répertoire courant, c'est à dire les .mp3 dont on retire l'extension grà¢ce à sed.
echo " " >> $1/musiques.txt#une ligne d'espacement pour séparer les albums
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
echo "\n" >> $1/musiques.txt#une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne
#20 Le 09/12/2007, à 19:53
- freebird
Re : [script Bash] Lister artiste, albums et chansons
Et c'est quoi ton soucis au juste ?
Hors ligne
#21 Le 09/12/2007, à 20:08
- Alain.g
Re : [script Bash] Lister artiste, albums et chansons
si tu veux un seul fichier avec toute la liste, mets juste > musiques.txt après le done tout à la fin du script.
done > musiques.txt
(sans tous les ">> $1/musiques.txt" que tu as mis)
Dernière modification par Alain.g (Le 09/12/2007, à 20:08)
Xubuntu Karmic !
Hors ligne
#22 Le 04/01/2008, à 22:27
- Autiwa
Re : [script Bash] Lister artiste, albums et chansons
j'y ai passé l'après midi, mais j'ai réussi. J'ai modifié mon code pour générer la liste en LaTeX.
J'ai eu beaucoup de soucis d'encodages avec des apostrophes exotiques, des lettres accentués qui ne se valaient pas. J'ai du modifier à la main certaines chansons qui avaient un mauvais encodage alors il se peut que si vous l'utilisez, ça ne marche pas du premier coup.
La dernière astuces d'Alain.g marche d'ailleurs à merveille bien que je ne l'ai pas vu de suite.
Pour ceux que ça intéresse, voici le code :
#!/bin/bash
#version 0.31 v LaTeX
#larges contributions de freebird et Alain.g
#nécessite que latex soit installé ainsi que les packages qui sont utilisé juste en dessous.
#Mode D'Emploi : lancer la commande avec en argument le chemin du dossier des musiques
IFS=$'\n'
#le test ci-dessous est là pour qu'on puisse utiliser le script soit en ligne de commande, soit via les scripts nautilus en faisant clic droit sur le dossier des musiques.
if [-z "$1"]#teste si la variable $1 est vide
then
path=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS #on extrait le dossier dans lequel on se trouve
else
path=$1
fi
cd $path
echo "\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\pdfcompresslevel=9
\usepackage{pstricks}
\usepackage{geometry}
\geometry{margin=2.5cm}
\usepackage{hyperref}
\hypersetup{colorlinks=true,breaklinks=true,urlcolor= black,linkcolor= black}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\lhead{\leftmark}
\cfoot{\thepage}
\setlength{\parindent}{0cm}
\newrgbcolor{marou}{0.71 0.31 0.09}
\newrgbcolor{vertf}{0.22 0.50 0.20}
\makeatletter
\renewcommand\section{\@startsection{section}{1}{\z@}{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus 2ex}{\normalfont\Large\sffamily\bfseries\marou}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex \@plus -1ex \@minus -.2ex}{1.5ex \@plus 2ex}{\normalfont\Large\sffamily\bfseries\vertf}}
\makeatother
\renewcommand{\thesection}{}
\renewcommand{\thesubsection}{\hspace{1cm}}
\begin{document}
\tableofcontents
\newpage">musique.tex
for artiste in $(ls -d */ | tr -d /)
do
cd $artiste #on se déplace dans le répertoire de l'artiste
#on affiche le nom de l'artiste en mettant en forme
echo "\section{$artiste}"
for album in $(ls -d */ | tr -d /)
do
echo "\subsection{$album}" #on affiche le nom du répertoire courant
cd $album #on se place dans le répertoire courant
ls -1 *.mp3 *.MP3 *.ogg 2>/dev/null|sed 's/\....$/\\\\/Ig' #on affiche la liste des chansons du répertoire courant. On peut spécifier d'autres extensions.
echo #une ligne d'espacement pour séparer les albums
cd .. #on revient à la racine de l'artiste pour pouvoir se placer dans l'album suivant à la boucle suivante
done
cd .. #on revient à la racine des musiques pour pouvoir se placer à l'artiste suivant pour la prochaine boucle
echo #une ligne d'espacement pour séparer les artistes par deux lignes. (la précédente est dûe à celle des albums)
done>>musique.tex
echo "\end{document}">>musique.tex
sed -e 's/\_/\\\_/Ig' musique.tex > musique.tex.tmp && mv -f musique.tex.tmp musique.tex
sed -e 's/\%/\\\%/Ig' musique.tex > musique.tex.tmp && mv -f musique.tex.tmp musique.tex
sed -e 's/\&/\\\&/Ig' musique.tex > musique.tex.tmp && mv -f musique.tex.tmp musique.tex
sed -e 's/\#/\\\#/Ig' musique.tex > musique.tex.tmp && mv -f musique.tex.tmp musique.tex
sed -e "s/\’/\\\'/Ig" musique.tex > musique.tex.tmp && mv -f musique.tex.tmp musique.tex
sed -e "s/Å“/\\\oe\{\}/Ig" musique.tex > musique.tex.tmp && mv -f musique.tex.tmp musique.tex
#cat musique.tex|sed 's/\_/\\\_/Ig'|sed 's/\%/\\\%/Ig'|sed 's/\&/\\\&/Ig'|sed 's/\#/\\\#/Ig'>musique.tex
iconv -f utf-8 -t iso-8859-15 musique.tex -o musiques.tex
#musique.tex
pdflatex musiques.tex| zenity --progress --text="Première compilation en cours..." --pulsate --auto-close
pdflatex musiques.tex| zenity --progress --text="Deuxième compilation en cours..." --pulsate --auto-close
rm musique.tex musiques.aux musiques.log musiques.out musiques.toc
Dernière modification par Autiwa (Le 06/01/2008, à 00:51)
Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.
Hors ligne