#!/usr/bin/perl --
use Path::Class;
use constant THISFILE => file( __FILE__ )->absolute->stringify;
use constant THISDIR => file( THISFILE )->dir->stringify;
use strict;
use warnings;
use File::Find::Rule;
use Data::Dump qw/ dd pp /;
use POSIX();
use CGI();
# for hourly backups
our $today = POSIX::strftime('%Y-%m-%d-%H', localtime);
Main( @ARGV );
exit( 0 );
sub Fudge {
use Errno();
join qq/\n/,
"Error @_",
map { " $_" } int( $! ) . q/ / . $!,
int( $^E ) . q/ / . $^E,
#~ grep( { $!{$_} } keys %! ),
q/ /;
}
use List::MoreUtils 'uniq';
sub Main {
@_ or die "Usage: $0 dir-to-make-indexes-beneath \n";
my @dirs = uniq( map { dir( $_ )->absolute } find( directory => in => \@_ ) ) ;
for my $dir ( @dirs ){
chdir $dir or die Fudge("chdir $dir");
my $title = $dir->basename;
if( -e 'index.html'){
rename 'index.html', "index.html.$today.bak"
or die Fudge(qq{ $dir / rename 'index.html', "index.html.$today.bak" });
}
my $files = join ' ',
'
'. ( faFile("../", '../index.html') ).'
',
map {
''.
( -f $_ ? faFile($_) : faFile("$_/", "$_/index.html") )
.'
'
}
grep { -e $_ }
grep { not /^index\.html(\.\d\d\d\d-\d\d-\d\d-\d\d\.bak)?$/ }
glob '*';;;
open my($ih), '>', 'index.html' or die Fudge("$title/index.html");
print $ih qq{},
qq{@{[ CGI::escapeHTML( $title ) ]}},
qq{},
qq{};
close $ih;
}
}
sub faFile {
my $a = CGI::a({ -href => $_[1] // $_[0] }, $_[0] );
my( $size, $modtime ) = (stat $_[0] )[ 7, 9 ];
"$size | $a | ".gmtime($modtime).' | '
}
__END__
$ perl makeindex.html.pl dir-test-dir
$ gtree -f dir-test-dir
dir-test-dir
|-- dir-test-dir/Fort
| |-- dir-test-dir/Fort/Knox.html
| |-- dir-test-dir/Fort/index.html
| |-- dir-test-dir/Fort/index.html.2013-05-17-12.bak
| |-- dir-test-dir/Fort/index.html.2013-05-17-15.bak
| |-- dir-test-dir/Fort/index.html.2013-05-17-16.bak
|-- dir-test-dir/Fort.html
|-- dir-test-dir/index.html
|-- dir-test-dir/index.html.2013-05-17-12.bak
|-- dir-test-dir/index.html.2013-05-17-15.bak
|-- dir-test-dir/index.html.2013-05-17-16.bak