#!/usr/bin/perl -s use File::Find; use mp; $mpdir = shift || $ENV{MP_ROOT} || '/home/jj/MuseuPessoa/MP'; $MFI="MP_file_index"; mkMeta($mpdir); sub mkMeta{ my $f=shift ; # || $ENV{MP_ROOT}; print("$f"); %mpindex = index_import_init("$f/$MFI"); die("this is not a valid directory\n") unless (-d $f); find(sub{ my $path=$File::Find::name; my $a=typeof($path, $File::Find::dir); return if ($path =~ m{/_}); print("."); if (not defined $mpindex{$path}) { $mpindex{__LAST__}{$a}++; print("\n $path -- $a"); $mpindex{$path}{perm} = 1; $mpindex{$path}{tipo} = $a; $mpindex{$path}{id} = $mpindex{__LAST__}{$a}; } if (-d $path and not -e "$path/META" and not -e "$path/_META") { open(F,">$path/_META") or die ("cant create open _META"); print F "\n $a\n\n"; close(F); } }, $f); print("\n"); index_save("$f/$MFI", %mpindex); } sub typeof{ my $f=shift; my $dir = shift; my $tipo="UNDEF"; my $raz=""; if (-d $f) { my @hv = ((<$f/[Ee]ntrevista*>) , (<$f/[Dd]epoim*>)); my @pro = ((<$f/Projec*>),(<$f/*/entrevista*>)); my @xmls = (<$f/*.xml>); if (-e "$f/META" or -e "$f/_META") { $tipo = `grep 'tipo' '$f'/*META`; if ($tipo =~ m{(.*?)} ) { $tipo=$1; $raz="meta"; } else { $tipo="META WITH NO TYPE??"; } } elsif (@hv) { $tipo = 'HV'; $raz=join(":",@hv); } elsif (@pro) { $tipo = "PROJ"; $raz=join(":",@pro); } elsif ($f =~ /[Pp]roject\w*$/ ) { $tipo = 'PROJ';$raz="pelo nome"; } elsif ($f =~ /\/[fF]oto\w*$/ ) { $tipo = 'ALBUM';$raz="pelo nome"; } elsif ($f =~ /\/contact\w*$/ ) { $tipo = 'GESTAO';$raz="pelo nome"; } elsif ($f =~ /CVS/ ) { $tipo = 'CVS';$raz="pelo nome"; } elsif (@xmls and grep { typeof($_) eq 'mp'} @xmls ) { $tipo = 'HV'; $raz="euristica"; } else { $tipo = 'DIR??'; } # print("\n$f\n $tipo (porque... $raz)\n"); } else { if ($dir =~ /CVS/) { $tipo="CVS FILE"; } elsif ($f =~ /\.jpg$/i) { $tipo="JPG"; } elsif ($f =~ /\.gif$/i) { $tipo="GIF"; } elsif ($f =~ /\.html?$/) { $tipo="HTML"; } elsif ($f =~ /\.doc$/) { $tipo="WORD"; } elsif ($f =~ /\.mp3$/) { $tipo="SOM"; } elsif ($f =~ /$MFI$/) { $tipo="MPFileIndex"; } elsif ($f =~ /\.xml$/) { $tipo=`grep '<[a-zA-Z]' '$f' | head -1 `; if ($tipo =~m{^.*?<(\w+)} ) { $tipo = $1; } else { $tipo="????"; } } elsif ($f =~ /META$/) { $tipo="META"; } else { $tipo="FILE??"; } } $tipo; } sub index_save{ my $path=shift; my %ind = @_; open(F, ">$path"); print F join("", (map {((/__LAST__/)?():("$ind{$_}{id}:$_:$ind{$_}{tipo}:$ind{$_}{perm}\n")) } sort keys %ind)); for (keys %{$mpindex{__LAST__}}) { print F "$mpindex{__LAST__}{$_}:__LAST__:$_\n"; } close F; } sub index_import_init{ my $path=shift; my %ind=(); if (-f $path) { open(F, $path ); while () { if (/(.+):(.+):(.*):(.*)/) { $ind{$2}{id} = $1; $ind{$2}{tipo} = $3; $ind{$2}{perm} = $4; } elsif (/(.+):(.+):(.+)/) { $ind{$2}{$3} = $1; } } close F; } else { $ind{__LAST__}={}; } %ind; } __END__