Listage d'un répertoire dans un fichier HTML

alain Adelmar
aadelmar@numericable.fr beuuh c est quoi ca

Rep2html est un script Perl qui liste un répertoire dans un fichier html du nom du répertoire précédé de rep_ comme, rep_Documents.html. C'est plus jolie que dans la console et plus pratique ensuite pour ouvrir car les fichiers sont représentés sous forme de liens, donc ouvrable d'un seul clic de souris, et puis ça laisse des traces, ce fichier et comme une image du contenu. Vous pouvez bien sùr l'appeler avec des options qui définirons les renseignements que vous désirez voir apparaitre sur ce fichier. Il aura ce look à  peut prêt:


rep_documents.html
----------------------------> /home/alain/documents
  ascii.html  			Accès Lundi 09/12/2003 10:53:20
ascii_ec.html Accès Mardi 27/06/2004 02:10:41
astuces.html Accès Jeudi 17/12/2003 21:26:40
auto_ascii.html Accès Lundi 18/12/2003 01:55:40
base_connaissances_perso.html Accès Mardi 15/02/2001 16:35:19
bash_exemple.html Accès Mardi 15/12/2003 02:10:41
bash_exemple.html Accès Jeudi 28/12/2003 09:00:50
car2hex.html Accès Lundi 23/09/2003 11:30:00
ccp2all.html Accès Lundi 15/12/2003 02:10:41
chg_ext.html Accès Mardi 17/11/2003 11:50:22
chg_ext_pl.htm Accès Jeudi 15/12/2003 08:10:18
clean_doublon.html Accès Jeudi 15/12/2003 02:10:41

Pour une meilleure conpréhention j'ai directement laisser la colorisation du code Perl par Scite (l'éditeur libre qui m'à  tant aidé depuis de nombreuses années sur Linux mais aussi sur Windows). Si vous désirez le code il ce trouve sur le site ici (surement ./rep2html).

alain Adelmar
#!/usr/bin/perl -w
#!perl -w          
# remd: liste le contenu des repertoires désiré dans un fichier rep.html et un rep.dat.*
# requier le module FrDate.pm pour l'affichage de (la date et l'heure en français)     *
# écris par Alain Adelmar aadelmar@free.fr _  peut être utiliser sur tout OS (Lx, M$)  * 
# Multi environement (UNIX-Like, MicroSoft, msys, cygwin)_ version:2.2 du 20/03/2004   *
# Usage: rep2html [repertoire]    pour avoir un repertoire au choix                    *
# rep2html                        pour avoir le repertoire courant (defaut) :          *
# ------------------écrit par alain Adelmar -------------------------------------------*
# Enjoyed, that's a aadelmar's script, fun free and french     "hé, ouai mon pote"     *
#--------------------------------------------------------------------------------------* 

use  Cwd;
$dir  = cwd ;

use  FrDate;
$mod_affichage  = 2 ;
$fd  = maintenant ($mod_affichage );

my  $vide =  " "  x  30;
my  $x = "*-" x  25;
my  $tiret  = "-"  x50;
my  $nlr =  0;
my  $al =  "\t=== A_l_a_i_n -\/\/- A_d_e_l_m_a_r ===      |" ;
my  $lbl =  "$x\n$al\n$x\n\n" ;
my  $mi =  "<hr\>alain Adelmar <a href=\"mailto:aadelmar\@free.fr\"\>aadelmar\@free.fr<\/a\>\n" ;


if  (@ARGV)  {
  
if( $ARGV[0 ] =~  /^-/)  {
    
s/-()/$1/ ;
    
$argv  =  $1;
    
$d  =  $ARGV[1 ];
    
print  "$x\n$al\n\n$x\n\n" ;
  
}
  
else  {
    
$d  =  $ARGV[0 ];
    
print  "$x\n$al\n\n$x\n\n" ;
  
}
}
else  {
  
print 
  
print  "usage: rep2html [répertoire] \n" ;
  
print  "Indiquez le dossier a traiter:\n" ;
  
chomp( $d =  <STDIN >);
}

  
format  STDOUT_TOP  =
Page  @<<
$%

 
Fichier                      Date du  dernier  changement
=====================        ===========================
.


if  ($d  eq "" ) {
  
$d  = $dir ;
}
else  {
  
unless  (-d  $d)  {
    
print  "Entrez un chemin de fichier valide:\n" ;
    
$d  =  <STDIN>;
    
chomp  $d;
  
}
}

if  ($ENV{ "MACHTYPE"}=~  /[msys|cygwin|gnu]$/ ) {
  
$gnus++;
  
print  "this is a real gnu OS, congratulation\n" ;
}
elsif  ($ENV{ "PATH"}=~  /^\//)  {
  
$gnus++;
  
print  "this is a real gnu OS, congratulation\n" ;
}

@gnul  = ( "\\",  "\/");

@ds  = split (/$gnul[$gnus]/ , $d );
$ds  = pop  @ds;


$fout  = "rep_"  .  "$ds" .  ".html" ;
&gnotise ($fout);
$fout_dat  = "rep_"  .  "$ds" .  ".dat";
&gnotise ($fout_dat);

open  OUT,  ">$fout"  or die  "Ouverture du fichier rep impossible $!" ;
print  OUT "<HTML\>\n\t<head\>\n\t\t<meta http-equiv=\"Content-Type\" content=\"text\/html;
charset=iso-8859-1\"\>\n\t\t<meta name=\"author\" content=\"adelmar alain et
Perl\"\>\n\t<\/head\>\n<body\><br>\n"
;
print  OUT "Edité automatiquement par le script rep2html\.pl le: "  .  "$fd" .  "\nn\'efféctuez pas
de modifications (SVP)\.\n<hr\>\n"
;
open  OUTDAT,  ">$fout_dat"  or die  "Screugneugneu $fout_dat ne veux pas souvrir $!" ;
print  OUTDAT "Edité automatiquement par le script rep\.pl le: "  .  "$fd" .  "\nn\'efféctuez pas de modifications (SVP)\.\n" ;


opendir  R,  "$d" or  die  "Ouverture repertoire impossible $!" ;
$opd  = 1 ;
foreach  $file ( sort readdir  R){
  
$u++;
  
next  if ( $file =~  /^\./);
  
$frd  = datefichier ($mod_affichage , $opd , $file );
  
$line  = ":$file\n\t$frd\n" ;
  
if( -d $file ) {
    
$reptmp  =  "d";
    
print  OUT  "<img SRC=\"folder.jpg\"\>&nbsp;&nbsp;<b\><a href=\"$d"  .  "$gnul[$gnus]"  . "$file\"\>$file<\/a\><\/b\><br\>
<div align=center\>$frd<\/div\><br\>\n"
;
    
write ;
    
print  OUTDAT  "$reptmp $line";

  
}
  
elsif( -f $file ) {
    
print  OUT  "<img SRC=\"file.jpg\"\>&nbsp;&nbsp;<a href=\"$d"  .  "$gnul[$gnus]"  . "$file\"\>$file<\/a\><br\><div align=center\>$frd
<\/div\><br\>\n"
;
    
#damned avec remd: je pourrai carrement afficher le commentaire ï¿½ cot� du liens (but no alias sur M$)
    
$reptmp  =  "f";
    
$rem  =  &remdthat ($file);
    
write ;
    
if  ($argv  eq  "c")  {
      
print  OUTDAT  "$reptmp $line\n$rem\n";
    
}
    
print  OUTDAT  "$reptmp $line";
  
}
  
else  {
    
print  OUT  "<img SRC=\"file.jpg\"\>&nbsp;&nbsp;<a href=\"$d"  .  "$gnul[$gnus]"  . "$file\"\>$file<\/a\><br\><div align=center\>$frd
<\/div\><br\>\n"
;
    
#damned avec remd: je pourrai carrement afficher le commentaire ï¿½ cot� du liens (but no alias sur M$)
    
$reptmp  =  "f";
    
$rem  =  &remdthat ($file);
    
write ;
    
if  ($argv  eq  "c")  {
      
print  OUTDAT  "$reptmp $line\n$rem\n";
    
}
    
print  OUTDAT  "$reptmp $line";
  
}
}       
closedir  R or  die  "Fermeture du repertoire impossible $!" ;

print  OUTDAT "\n$lbl\n" ;
close  OUTDAT  || die  "Fartoi encoula granda connasse, 30000 fois saloperie ce ptain de $fout_dat
ne veut pas ce fermer $!"
;
print  OUT "$mi\n" ;
close  OUT or  die  "Fermeture impossible bordel $!" ;

print  "nombre de fichier traite $u\n" ;
print  "\n\nUn fichier $fout a été créé ainsi qu'un fichier $fout_dat\nBonne journée\nalain\n" ;

sub  gnotise($fili ) {
  
my( $fili)=  @_;
  
  
if  (-e  $fili)  {
    
$arch  =  "$fili"  . "~" ;
    
rename  $fili,  $arch  or die  "impossible de faire comme cela $!" ;
  
}
}

sub  remdthat  {
  
my( $file)=@_ ;
  
(@contenu , @remd )= "" ;
  
$filnm  = "$d"  .  "$gnul[$gnus]"  . "$file" ;

  
open  F,  "$filnm"  or die  "Ouverture de $file impossible $!" ;
  
@contenu  = F ;
  
$nlr  = 0 ;
  
foreach  $l(@contenu ) {
    
if  ($nlr  >=  1)  {
      
chomp  $l;
      
push  @remd,  $l;
      
goto  LABELLE  if  ($nlr  == 1 );
      
$nlr --;
    
}
    
elsif  ($l  =~  /remd:/)  {
      
chomp  $l;
      
push  @remd,  $l;
      
print  "ok pour $l\n" ;
      
$nlr  =  5;        # nombre de lignes de commantaires +1, changer le nombres ici
    
}
  
}
 
LABELLE: close F  ||  die "Fermeture de $file compromise $!" ;
  
$rem  = join ("\n\t",  @remd);
  
return  $rem;
}
 

format  STDOUT  =
@< <<< <<< <<< <<< <<< <<< <<< <<<<      @ <<< <<< <<< <<< <<< <<< <<< <<<
$file, $frd
.

END;

>|8O°) alain adelmar alias asynchrone