Derniers journaux de saorge :

Journal : Catalogue HTML d'un file system

Posté par saorge () le 30 novembre 2003
0
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).

> Lire le journal (4 commentaires, moyenne: 3,5).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

Re: Catalogue HTML d'un file system

Posté par Laurent Saint-Michel () le 30/11/2003 à 19:18. (lien). É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 schyzomarijks () le 30/11/2003 à 19:44. (lien). É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 ""

--
OO watching you !!!
  • [^]Re: Catalogue HTML d'un file system

    Posté par schyzomarijks () le 30/11/2003 à 19:47. (lien). Évalué à 1.

    Arg, templeet a manger les balises html comprise de la fonction main, en gros, il y avait l'entête

    le script se lance avec comme 1 argument le répertoire à analyser

    --
    OO watching you !!!
  • [^]Re: Catalogue HTML d'un file system

    Posté par TazForEver () le 30/11/2003 à 21:35. (lien). Évalué à 1.

    bien mais faut pas te sentir obligé de réécrire os.path.walk voire le nouveau os.walk

Revenir en haut de page