Journal Catalogue HTML d'un file system

Posté par  .
Étiquettes : aucune
0
30
nov.
2003
Bonjour,

Je cherche un petit programme me permettant d'établir un catalogue (simple fichier html) d'un ensemble de répertoire.
Un exemple :
- soit le répertoire music ayant le structure suivante :
- music
--- dir_1
------ file_1
------ file_2
--- dir_2
------ file_1
------ file_2
etc
J'aimerais donc trouver un programme qui créera un fichier html représentant cette structure sous la même forme. Chaque élément étant bien entendu un hyperlien !
L'objectif final est de générer un fichier catalogue que je placerai à la racine d'un répertoire que je graverai. Ce répertoire contient d'autres répertoires, et les fichiers sont de différents types (essentiellement des images et des vidéos).
  • # Re: Catalogue HTML d'un file system

    Posté par  . Évalué à 8.

    Tu peux esayer le logiciel tree avec l'option -H il permet d'évoir un fichier html. Tiens voici mon petit montage pour faire ce que tu veux faire : avec en oplus un gestions des mouvements (suppressions, ajouts, ...). Si tu veux les originaux mail moi.

    -- Fichier listing

    #!/bin/bash

    # Description : ce script utilise les commande de shell pour faire
    # un listing des fichiers présents, la sorite est en HTML
    # Il faut modifier la sortie après par un script Perl

    # On créé :
    # - 1 fichier listing-12-12-02 qui contient la liste des répertoires + des
    # fichiers de /mnt/divers/mp3 de toute l'arborescence sans le répertoire
    # .gestion qui ne contient rien d'interessant
    # - 1 fichier repertoires-12-12-02 qui contient la liste des répertoires
    # de /mnt/divers/mp3 de toute l'arborescence sans le répertoire
    # .gestion qui ne contient rien d'interessant
    # - 1 fichier "old" pour l'ancien fichier
    # - 1 fichier de différence pour listing
    # - 1 fichier de différence pour repertoires


    # C'est parti mon quiqui

    #on va dans le répertoire de stockage
    cd /mnt/divers/mp3/.gestion/

    # On copie les "anciens fichiers" standards
    cp -f listing listing.old
    cp -f repertoires repertoires.old
    cp -f diff diff-`date +'%d-%m-%y'`

    # On fait les "nouveaux fichiers" standard (pas d'extension HTLM)
    # Sans la date
    tree /mnt/divers/mp3/ -H 'ftp://xxxx.dyndns.org'(...) > listing
    tree /mnt/divers/mp3/ -d -H 'ftp://xxxx.dyndns.org'(...) > repertoires
    # Avec la date
    tree /mnt/divers/mp3/ -H 'ftp://xxxx.dyndns.org'(...) > listing-`date +'%d-%m-%y'`
    tree /mnt/divers/mp3/ -d -H 'ftp://xxxx.dyndns.org'(...) > repertoires-`date +'%d-%m-%y'`

    # On fait la différence
    echo "Fichier de différence" > diff
    echo "Date de l'enregistrement : `date +'%d-%m-%y'`" >> diff
    echo "" >> diff
    diff listing.old listing | grep '^>' >> diff
    echo "" >> diff
    echo "#----------#" >> diff
    echo "" >> diff
    diff listing.old listing | grep '^<' >> diff
    echo "</suppression>" >> diff
    #On veut tout garder les infos (ajouts, suppressions)

    --
    et le fichier listing.pl
    --
    #!/usr/bin/perl -w

    # Description : ce script met enforme les résultats obtenus
    # par le script pour faire un listing html

    # On commence par ouvrir les fichiers listing, diff et répertoires
    open (LISTING, "/mnt/divers/mp3/.gestion/listing")or die "Impossible d'ouvrir le fichier: $!";
    open (REPERTOIRES, "/mnt/divers/mp3/.gestion/repertoires") or die "Impossible d'ouvrir le fichier: $!";
    open (DIFF, "/mnt/divers/mp3/.gestion/diff") or die "Impossible d'ouvrir le fichier: $!";

    # Ensuite on ouvre les fichiers HTML résultats
    open (LISTING_HTML, ">/mnt/divers/mp3/.gestion/listing.html")or die "Impossible d'ouvrir le fichier: $!";
    open (REPERTOIRES_HTML, ">/mnt/divers/mp3/.gestion/repertoires.html") or die "Impossible d'ouvrir le fichier: $!";
    open (DIFF_HTML, ">/mnt/divers/mp3/.gestion/diff.html") or die "Impossible d'ouvrir le fichier: $!";

    # ------------------------------------------------------
    # On attaque les définitions pour les fichiers HTML
    # ------------------------------------------------------

    # Listing complet des fichiers
    print LISTING_HTML <<"FIN";
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd(...)">


    Liste des fichiers musicaux
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">



    <!--
    BODY { font-family : courier, arial, sans-serif; }
    .VERSION { font-family : arial, sans-serif; }
    -->



    FIN

    #Listing des répertoires
    print REPERTOIRES_HTML <<"FIN";
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd(...)">


    Liste des répertoires
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">



    <!--
    BODY { font-family : courier, arial, sans-serif; }
    .VERSION { font-family : arial, sans-serif; }
    -->



    FIN

    #Listing des differences
    print DIFF_HTML <<"FIN";
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd(...)">


    Liste des différences
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">



    <!--
    BODY { font-family : courier, arial, sans-serif; }
    .VERSION { font-family : arial, sans-serif; }
    -->



    FIN

    #-------------------------------------------------------
    # Traitement des données
    #-------------------------------------------------------

    #On commence par un tri : on sélectionne entre les bornes
    # et

    #Première itération sur listing
    while () { last if m//; }
    #while() { last if m/<\/BODY>/; print; }
    while () { last if m//; print LISTING_HTML; }

    #Seconde itération sur répertoires
    while () { last if m//; }
    while () { last if m//; print REPERTOIRES_HTML; }

    #On traite les diff maitenant
    print DIFF_HTML "";
    while () { last if m//; }
    while () { last if m/<\/ajout>/; print DIFF_HTML; }
    while () { last if m//; }
    while () { last if m/<\/suppression>/; print DIFF_HTML; }

    #Cloture des fichiers HTML

    print LISTING_HTML <<"FIN";



    Listing generated par tree v1.4b1 © 1996 - 2002 by Steve Baker and Thomas Moore
    HTML output hacked and copyleft © 1998 by Francesc Rocher, modified by Laurent Saint-Michel (2002)
    This software is experimental. Send commends and/or suggestions to Laurent saint-Michel







    FIN

    print REPERTOIRES_HTML <<"FIN";



    Listing generated par tree v1.4b1 © 1996 - 2002 by Steve Baker and Thomas Moore
    HTML output hacked and copyleft © 1998 by Francesc Rocher, modified by Laurent Saint-Michel (2002)
    This software is experimental. Send commends and/or suggestions to Laurent saint-Michel







    FIN

    print DIFF_HTML <<"FIN";



    Listing generated par tree v1.4b1 © 1996 - 2002 by Steve Baker and Thomas Moore
    HTML output hacked and copyleft © 1998 by Francesc Rocher, modified by Laurent Saint-Michel (2002)
    This software is experimental. Send commends and/or suggestions to Laurent saint-Michel







    FIN



    # On ferme les handler sur les fichiers
    close(LISTING_HTML);
    close(REPERTOIRES_HTML);
    close(DIFF_HTML);
  • # Re: Catalogue HTML d'un file system

    Posté par  . Évalué à 4.

    J'ai un petit script python qui fait ca, accompagner d'une feuille css, tu en fait ce que tu veut:

    Je te laisse comme exercice de faire du html valide, c'est pas trop dur.


    import os, sys
    from stat import *

    def walktree(top, callback, num_step):
    '''recursively descend the directory tree rooted at top,
    calling the callback function for each regular file'''

    for f in os.listdir(top):
    pathname = os.path.join(top, f)
    mode = os.stat(pathname)[ST_MODE]
    if S_ISDIR(mode):
    # It's a directory, recurse into it
    callback(pathname, num_step)
    walktree(pathname, callback,num_step+1)
    elif S_ISREG(mode):
    # It's a file, call the callback function
    callback(pathname, num_step)
    else:
    # Unknown file type, print a message
    print 'Skipping %s' % pathname

    def visitfile(file, num):
    file = file[file.rfind("/")+1:]
    print "<h"+str(num)+">"+ file +"</h"+str(num)+">"

    if __name__ == '__main__':
    i=1
    print ""
    walktree(sys.argv[1], visitfile,i)
    print ""

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.