AIDE script bash avec en sortie, arborescence navigable
AIDE script bash avec en sortie, arborescence navigable - Shell/Batch - Programmation
MarshPosté le 20-12-2011 à 13:34:51
Bonjour à tous !
Dans le cadre de mes études, je dois écrire 2 scripts bash.
Le principe est le suivant : j'ai en entrée une arborescence, en sortie, je dois pouvoir naviguer via un navigateur internet dans cette arborescence.
contraintes : . utiliser le html, . utiliser 3 bout de codes html séparément (head, boy et end) . prendre plusieurs modes en compte, surtout le mode "COPY" et le mode "LIEN" . écrire un script de traitement des arguments de la ligne de commande, . écrire un script qui exécute ce qui est demandé.
j'ai écris le script traitement.sh qui traite correctement les arguments. sur la ligne de commande on doit OBLIGATOIREMENT tapé
--src DOSSIER_SOURCE --www DOSSIER_CIBLE (le mode copy est --copy)
Mon problème réside dans le second script (évidemment ... )
J'ai pensé, lister tous les répertoires de l'arborescence, prendre chacun des répertoires, lister son contenu, et faire un index.html de se contenu. Ex ; pour dossier_cible, l'index.html serait du type
<!DOCTYPE=html> <head> <title> nom_chap </title> <body> <a href="dossier_cible/fichier1.txt"> fichier1 </a><br/> <a href="dossier_cible/dossier2/index.html"> dossier2 </a><br/> <a href="dossier_cible/dossier3/index.html"> dossier3 </a><br/> </body> </html> en cliquant sur dossier3 ca ouvre l'index.html du dossier3 qui affiche dossier4 et fichier3.txt
Sachant qu'on utilise 3 bout de codes html :
head : <!DOCTYPE=html> <head> <title> nom_chap </title> <body>
body : <a href="chemin"> nom_fichier </a><br/>
end : </body> </html>
j'ai aussi pensé à la récursivité, et à dire la vérité je me suis perdu dans les deux méthodes.
Voilà ce que j'ai réussi à faire et qui ne fonctionne pas :
for dossier in $(find $cible -mindepth 1 -maxdepth 1 -type d ) ; do
sed "s|nom_chap|"$(basename $(dirname $dossier))"|" /home/benjamin/Bureau/Prenom_Nom/bin/head.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
echo " $(basename $dossier) est un dossier " sed "s|nom_fichier|"$(basename $dossier)"|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html | sed "s|chemin|$dossier/index.html|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
for fichier in $(find $dossier -mindepth 1 -maxdepth 1 -type f) ; do
echo " $(basename $fichier) est un fichier " sed "s|nom_fichier|"$(basename $fichier)"|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html | sed "s|chemin|$fichier|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html done
1 : Je rentre dans la cible 2 : je liste uniquement ce que je vois, j'en fais un index. 3 : s'il y a des dossiers, je rentre dedans et je réexecute depuis l'étape2
Ca parait simple je sais ^^'
Est ce que vous pourriez m'aider s'il vous plait ?
Marsh Posté le 20-12-2011 à 13:34:51
Bonjour à tous !
Dans le cadre de mes études, je dois écrire 2 scripts bash.
Le principe est le suivant : j'ai en entrée une arborescence, en sortie, je dois pouvoir naviguer via un navigateur internet dans cette arborescence.
contraintes :
. utiliser le html,
. utiliser 3 bout de codes html séparément (head, boy et end)
. prendre plusieurs modes en compte, surtout le mode "COPY" et le mode "LIEN"
. écrire un script de traitement des arguments de la ligne de commande,
. écrire un script qui exécute ce qui est demandé.
j'ai écris le script traitement.sh qui traite correctement les arguments. sur la ligne de commande on doit OBLIGATOIREMENT tapé
--src DOSSIER_SOURCE --www DOSSIER_CIBLE
(le mode copy est --copy)
Mon problème réside dans le second script (évidemment ... )
l'arborescence (simplifiée) est la suivante :
DOSSIER_CIBLE
. fichier1.txt
. dossier2
. fichier2.txt
. fichier21.txt
.dossier 3
. dossier4
.fichier4.txt
. fichier41.txt
. fichier3.txt
J'ai plusieurs choix qui s'offrent à moi :
J'ai pensé, lister tous les répertoires de l'arborescence, prendre chacun des répertoires, lister son contenu, et faire un index.html de se contenu.
Ex ; pour dossier_cible, l'index.html serait du type
<!DOCTYPE=html>
<head>
<title> nom_chap </title>
<body>
<a href="dossier_cible/fichier1.txt"> fichier1 </a><br/>
<a href="dossier_cible/dossier2/index.html"> dossier2 </a><br/>
<a href="dossier_cible/dossier3/index.html"> dossier3 </a><br/>
</body>
</html>
en cliquant sur dossier3 ca ouvre l'index.html du dossier3 qui affiche dossier4 et fichier3.txt
Sachant qu'on utilise 3 bout de codes html :
head :
<!DOCTYPE=html>
<head>
<title> nom_chap </title>
<body>
body :
<a href="chemin"> nom_fichier </a><br/>
end :
</body>
</html>
j'ai aussi pensé à la récursivité, et à dire la vérité je me suis perdu dans les deux méthodes.
Voilà ce que j'ai réussi à faire et qui ne fonctionne pas :
# $cible=/home/b/Bureau/Exo/TEST
# boolecopie=true
if $boolecopie ; then
cp -r $source/* $cible
for dossier in $(find $cible -mindepth 1 -maxdepth 1 -type d ) ; do
sed "s|nom_chap|"$(basename $(dirname $dossier))"|" /home/benjamin/Bureau/Prenom_Nom/bin/head.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
echo " $(basename $dossier) est un dossier "
sed "s|nom_fichier|"$(basename $dossier)"|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html | sed "s|chemin|$dossier/index.html|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
for fichier in $(find $dossier -mindepth 1 -maxdepth 1 -type f) ; do
echo " $(basename $fichier) est un fichier "
sed "s|nom_fichier|"$(basename $fichier)"|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html | sed "s|chemin|$fichier|" /home/benjamin/Bureau/Prenom_Nom/bin/body.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
done
cat /home/benjamin/Bureau/Prenom_Nom/bin/end.html >> /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
cat /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html >> $dossier/index.html
rm /home/benjamin/Bureau/Prenom_Nom/bin/tmp.html
done
else
mode lien.
en algorithmique :
1 : Je rentre dans la cible
2 : je liste uniquement ce que je vois, j'en fais un index.
3 : s'il y a des dossiers, je rentre dedans et je réexecute depuis l'étape2
Ca parait simple je sais ^^'
Est ce que vous pourriez m'aider s'il vous plait ?
Merci d'avance !