#!/usr/bin/perl -w # run from cron to build index.html files for file share dir structure my @todo="/home/publicfile/ftp/pub"; while ($dir=pop(@todo)) { opendir(DIR, $dir) or die ("Can't open $dir for read $!\n"); my @dircontents = readdir(DIR); closedir (DIR) or die ("Can close! wtf? $!\n"); # insert sort routine here @dircontents = sort @dircontents; # wow, that was tough! open (INDEX, ">$dir/index.html") or die ("Can't open $dir/index.html $!\n"); doheader(); for $line (@dircontents) { if ($line =~ /^index.html$/) {next} ; if ($line =~ /^.message$/) { open (MESSAGE, "$dir/$line") or warn ("Can't open message $!\n"); my @message = (); close (MESSAGE) or die ("Can' close message wtf? $!\n"); for $messline (@message) { print (INDEX "$messline\n"); } next ; } ; if ($line =~ /^\./) {next}; stat ("$dir/$line") or warn ("Can't stat $dir/$line $!\n"); if (!-r _) {next}; # replace space with html-friendly %20 for HREFs $linens = $line; $linens =~ s/\s/%20/g ; print (INDEX "\n"); if (-d _) { push (@todo, "$dir/$line"); print (INDEX ""); print (INDEX " "); print (INDEX "$line/"); print (INDEX ""); print (INDEX "\n"); print (INDEX ""); print (INDEX "\n"); } if (-f _) { print (INDEX ""); print (INDEX " "); print (INDEX "$line"); print (INDEX ""); print (INDEX "\n"); print (INDEX ''); $size = (stat (_))[7]; print (INDEX "$size "); print (INDEX "bytes"); print (INDEX "\n"); } print (INDEX "\n\n"); } dofooter(); close (INDEX) or die ("Can't close index.html! $!\n"); # open next dir } exit 0; sub doheader { print (INDEX ''); print (INDEX "\n"); print (INDEX " \n"); my $curdir = substr($dir,24); if ($curdir eq "") {$curdir="/"}; print (INDEX "Contents of $curdir \n"); print (INDEX "

Contents of $curdir

\n"); print (INDEX "
\n"); print (INDEX ''); print (INDEX "\n"); print (INDEX " \n"); } sub dofooter { print (INDEX " \n"); print (INDEX "
\n"); print (INDEX " \n"); }