Un peu de code
Voir le script Perl
#!/usr/bin/perl
# Script qui fabrique un fichier html depuis un listing récursif de répertoire
# Bruno ANSELME - 27,28 octobre 2010 - bruno.anselme@free.fr
###############################################################################"
# Modifier la ligne suivante pour choisir un autre encodage
$charset = "utf-8"; # autre choix courant : "iso-8859-15"
$cmdline = 0;
$nomscript = $0;
if ($#ARGV == 1) {
$rep = $ARGV[0];
$nomfic = $ARGV[1];
$cmdline = 1;
}
elsif ($#ARGV != -1) {
print "Utilisation : $nomscript SOURCEDIR HTMLFILE\n";
print " ou : $nomscript\n";
print "Fabrique le fichier HTMLFILE depuis le listing recursif du repertoire SOURCEDIR\n";
print "En l'absence de parametres, l'interface graphique de KDE demande de renseigner";
print " SOURCEDIR et HTMLFILE\n";
exit;
}
# Mettre les 6 lignes suivantse en commentaire si vous n'utilisez pas l'environnement KDE
if ((not $cmdline) and (`which kdialog`)) {
$rep = `kdialog --title "Choisir un repertoire" --getexistingdirectory \$HOME`;
if (not $rep) { exit; }
$nomfic = `kdialog --title "Enregistrer dans le fichier HTML" --getsavefilename index.html`;
if (not $nomfic) { exit; }
}
$premierepasse = 1;
%ancres = ();
$currep = "";
$indrep = 0;
$hote=`hostname`;
if ($rep =~ /\/$/) { chop($rep); } # si ça fini par un slash, on le vire
$ret = `ls -RshF --group-directories-first $rep`; # ls récursif et formaté sur le répertoire
@lignes = split(/\n/,$ret);
open(FIC,">$nomfic");
header("Contenu du répertoire : $rep de la machine $hote");
print FIC "Créé le : ".`date +"%d/%m/%Y à %H:%M:%S"`." par <b>$nomscript</b>\n";
foreach $ligne (@lignes) {
if ($ligne =~ /^$/) { next; } # - lignes vides
if ($ligne =~ /\@$/) { next; } # - liens symboliques
$ligne =~ s/\*$//; # - étoiles en fin de ligne
if ((not $premierepasse) and ($ligne =~ /:$/)) { #
print FIC "</div>\n";
}
if ($ligne =~ /^(.*):$/) { # Si c'est un titre de répertoire
$currep = $1;
$ligne = "<h4><a name=\"".$ancres{$currep}."\">$currep<\/a><\/h4>\n<div class=\"encadrer\">"; # + entete de répertoire
$premierepasse = 0;
}
$ligne =~ s/^total(.*)$/<b><i>Total des fichiers<\/i> : $1<\/b>/; # formate le total du répertoire
if ($ligne =~ /^ ?([\d\,\.]*\w) (.*)$/) { # Si c'est une ligne de fichier
($tail,$nom) = ($1,$2);
if ($ligne =~ /^ /) { $tail = ' '.$tail; };
if ($nom =~ /^(.*)\/$/) { # Si c'est une ligne de répertoire
$nom = $1;
$ancre = sprintf("%d",$indrep++);
$ancres{$currep."/".$nom} = $ancre;
$nom = " <a href=\"#$ancre\">$nom<\/a>"; # mettre un lien
$tail = " ";
}
$ligne = "<b>$tail<\/b> $nom";
}
$ligne =~ s/$/<br>/; # + saut de ligne en fin de ligne
$ligne =~ s/^( ?[\d\,\.]*\w) (.*)$/<b>$1<\/b> $2/; # + taille du fichier en gras
print FIC "$ligne\n";
}
if (not $premierepasse) {
print FIC "</div>\n";
}
footer();
# Mettre les 3 lignes suivantes en commentaire pour ne pas lancer le navigateur
if ((not $cmdline) and (`which firefox`)) {
exec("firefox $nomfic");
}
sub header {
my($titre) = @_;
print FIC <<END;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=$charset">
<title>$titre</title>
<style>
html { font-size: 10px; background-color: white;}
.encadrer {
border: 1px solid black;
font-family: fixed;
font-size: 12px;
margin: 2em;
padding: 1em;
}
h4 {
font-size: 1.2em;
}
.auteur {
float: right;
font-size: 10px;
}
</style>
</head>
<body>
<div class="auteur">Script écrit en Perl par Bruno ANSELME</div>
<h1>$titre</h1>
END
}
sub footer() {
print FIC <<END;
</body>
</html>
END
}