Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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