#1 Le 20/12/2011, à 13:10
- benb1703
AIDE Script bash avec en sortie, une arborescence navigable
Bonjour à tous !
Alors je vais expliciter un peu le titre,
je voudrais avoir en entrée une arborescence quelconque de fichiers, et en sortie pouvoir naviguer via un navigateur internet à travers cette arborescence.
L'objectif est d'écrire 2 scripts :
-un qui gère les arguments entrés sur la ligne de commande
- un qui execute les actions.
Contraintes : 2 modes, le mode copie qui copie l'arborescence source dans un dossier cible, et le mode lien qui crée les répertoires sources dans la cible, mais fait des fichiers, des liens symboliques.
on doit créer un index.html à chaque niveau, qui contient le contenu du niveau.
Avant de m'attaquer au deuxième mode, j'aurai besoin d'aide pour le mode copie ; en effet j'ai essayer la récursivité (rappeler le script a chaque fois), j'ai essayé pleins de méthodes différentes et à chaque fois je me suis perdu !
je dispose de 3 fichiers html : head, body et end.
head :
<!DOCTYPE=html>
<head>
<title> nom_chap </title>
<body>
body :
<a href="chemin"> nom_fichier </a><br/>
end :
</body>
</html>
le script qui éxecute :
#!/bin/bash -x
# $cible = /home/benjamin/Bureau/Prenom_Nom/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.
le script de traitement :
#!/bin/bash -x
boolesrc=false
boolewww=false
booleverbeux=false
boolecopie=false
if [ $1 ] ; then
while [[ $# > 0 ]] ; do
case $1 in
--src)
if [ $1 ] ; then
boolesrc=true
source=$2
shift
else echo "Le répertoire source n'existe pas. "
fi
;;
--www)
if [ $1 ] ; then
boolewww=true
cible=$2
shift
else echo "Le répertoire cible n'existe pas. "
fi
;;
--verbose)
booleverbeux=true
;;
--copy)
boolecopie=true
;;
--help)
cat HELP.txt
;;
*)
cat erreur_argument2.txt
# saisissez les arguments, options suivantes ...
;;
esac
shift
done
# passer boolverbeux, sans export ? juste en argument ?
if $boolesrc && $boolewww && $booleverbeux ; then
export source
export cible
export boolecopie
./traite_rep2.sh ;
elif $boolesrc && $boolewww ; then
export source
export cible
export boolecopie
./traite_rep.sh ;
else
cat erreur_argument.txt ;
fi
else
cat pas-darg.txt
fi
Hors ligne
#2 Le 20/12/2011, à 13:20
- sputnick
Re : AIDE Script bash avec en sortie, une arborescence navigable
Salut, pense aux balises code stp pour présenter le code.
Voici une solution basique à completer pour les options :
printf '<html>\n<head>\n<title></title>\n</head>\n<body>'
find -name '*foobar' -exec bash -c 'echo "<a href=\"${1#.}\">${1##*/}</a>"' -- {} \;
printf '</body></html>
Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr
Hors ligne