Administration Unix - TP séance 10
À la fin de la séance, déposez votre fichier de réponses sur la page Ametice en suivant bien les instructions, même si vous n'avez pas fini la planche ; lorsque vous aurez terminé, vous pourrez re-déposer la version finale.
Le deadline de rendu pour tous les TP est : mardi 3 janvier à 23h.
Mini-projet (3/3) : navigation dans des pages html de miniatures
(suite des planches TP8 et TP9 sur le script miniatures.sh
)
a) À l'aide de la commande wget, récupérez le tarball
https://pageperso.lis-lab.fr/~edouard.thiel/ens/adunix/pub/img-tp10.tgz
puis décompactez-le dans /tmp
.
Remplacez ensuite le programme principal de votre script miniatures.sh
par ces lignes :
rep1="/tmp/img-tp10"
rep2="/tmp/minia-tp10"
generer_miniatures_rep "$rep1" "$rep2"
generer_page_html "$rep1" "$rep2"
Exécutez votre script, puis à l'aide de votre navigateur, ouvrez la page
file:///tmp/minia-tp10/index.html
Vous devriez voir deux miniatures (Homer et Tux) et leur lien vers l'image originale, qui s'ouvre lorsque le lien est cliqué (sinon, voir la remarque qui suit).
Remarque : lorsque Firefox est installé dans un Snap (cas par défaut sur
Ubuntu 22.04+), ce navigateur n'a pas accès à /tmp
. Dans ce cas, créez un
répertoire $HOME/tmp
, décompactez le tarball dedans, puis ouvrez dans le
navigateur file:///$HOME/tmp/minia-tp10/index.html
en remplaçant $HOME
par
sa valeur ; dans la suite de l'énoncé remplacez partout /tmp
par $HOME/tmp
.
b) Rajoutez un fonction generer_bloc_navigation
, qui prend en argument un
chemin absolu rep_srca
, puis génère à l'aide d'un here-document
le bloc html suivant :
<p>Navigation :</p>
<ul>
<li><a href="../index.html">parent</a></li>
</ul>
c) Modifiez la fonction generer_bloc_navigation
de manière à ce que après le
premier <li>...</li>
, pour chaque sous-répertoire de rep_srca
, elle écrive
une ligne de la forme :
<li><a href="sous_rep/index.html">sous_rep</a></li>
en remplaçant sous_rep
par le nom du sous-répertoire (sans aucun chemin).
Remarque : pour parcourir tous les sous-répertoires, il suffit de parcourir tous les fichier et d'ignorer ceux qui ne sont pas des répertoires.
Appelez la fonction à la fin du script en lui passant "/tmp/img-tp10"
.
On devrait obtenir l'affichage suivant :
<p>Navigation :</p
<ul>
<li><a href="../index.html">parent</a></li>
<li><a href=chats/index.html>chats</a></li>
<li><a href=fleurs/index.html>fleurs</a></li>
</ul>
d) Dans la fonction generer_page_html
, appelez generer_bloc_navigation
en lui passant le chemin source absolu rep_srca
, de manière à lui faire
insérer le bloc des répertoires juste après le titre principal
<h1>...</h1>
.
Relancez votre script puis vérifiez dans le navigateur que le paragraphe de navigation apparaît avec les liens.
Remarque : pour le moment, lorsqu'on clique sur les liens des répertoires dans le navigateur, on obtient une erreur de fichier introuvable, c'est normal.
e) Dans le programme principal, remplacez provisoirement rep1
et rep2
par :
rep1="/tmp/img-tp10/chats"
rep2="/tmp/minia-tp10/chats"
puis relancez le script.
Ouvrez la page
file:///tmp/minia-tp10/index.html
puis cliquez sur "chats", cela devait vous conduire sur la page des chats ; dans celle-ci, cliquez sur "parent", cela devrait vous ramener dans la page initiale.
f) Nous allons maintenant générer récursivement toutes les miniatures et
fichiers index.html
pour chaque sous-répertoire, en nous inspirant du
parcours récursif effectué par la fonction chercher_fichier
dans le
cours n°8 section 9.2.3.
Écrivez une fonction generer_tout_recursif
qui prend en argument 1 la base
du répertoire source, noté base_src
(par exemple "/tmp/img-tp10"
), en
argument 2 la base du répertoire destination, noté base_dest
(par exemple
"/tmp/minia-tp10"
), et en argument 3 un sous-répertoire, noté sous_rep
, de
base_src
(par exemple "chats"
, ou "fleurs/roses"
; il peut aussi être "."
).
La fonction parcourt tous les sous-répertoires rep
de base_src/sous_rep
, et
pour chacun fait un appel récursif en passant à la fonction : base_src
(inchangé), base_dest
(inchangé), et le chemin de rep
relativement à
base_src
(par exemple si sous_rep
est "fleurs"
et rep
est
"/tmp/img-tp10/fleurs/roses"
, le 3e argument passé sera "fleurs/roses"
).
La fonction affecte ensuite rep1
comme le chemin base_src/sous_rep
, et rep2
comme le chemin base_dest/sous_rep
, puis appelle generer_miniatures_rep
et
generer_page_html
en leur passant rep1
et rep2
.
Pour tester, supprimez récursivement /tmp/minia-tp10
, puis dans le script,
remplacez le programme principal par
rep1="/tmp/img-tp10"
rep2="/tmp/minia-tp10"
generer_tout_recursif "$rep1" "$rep2" "."
Vérifiez ensuite dans le navigateur que les pages de miniatures s'affichent
et que vous pouvez passer de l'une à l'autre (chats, fleurs, roses, etc)
(sauf dans la page principale, le lien "parent" pointera vers un fichier
inexistant /tmp/index.html
, c'est normal).
g) Remplacez le programme principal de manière à gérer les options suivantes
en utilisant un case
:
-h ou --help affiche l'usage
-m rep1 rep2 génère les miniatures de rep1 dans rep2
-i rep1 rep2 génère l'index pour rep1 dans rep2
-r rep1 rep2 génère récursivement les miniatures et les index
à partir de rep1 dans rep2
Dans le cas d'une erreur, le programme affichera un message d'erreur ainsi que l'usage dans la sortie d'erreur puis échouera.
Vérifiez avec /tmp/img-tp10
et /tmp/minia-tp10
(après avoir effacé ce dernier).