#!/usr/bin/perl ####### # Created by : Manuel Batista # TO USE: # path/to/files /path/to/copy/location "name 1" "name 2" ... # ex: ./recover /home/batista /home/recovered "manny batista" "co-op" "resume" ###### use strict; use warnings; # modules use Cwd; use File::Spec; use File::Copy; # ADD FILE TYPES HERE my @docext= qw/doc jpg/; our %cache; my $rootdir = shift @ARGV; my $destdir = shift @ARGV; my @searchlist = @ARGV; # list of users # files my $search; #global search file &main(); sub main { for (@searchlist) { $search = $_; my @docfiles = &searchFiles($rootdir, @docext); if ($#docfiles >= 0){ &search ( \@docfiles ); } } } sub search { my $docref = shift; my @docfiles = @$docref; for my $file (@docfiles) { my @raw_data; open RECOVER, $file; @raw_data = ; close RECOVER; foreach my $data (@raw_data){ if ($data =~ /$search/i){ ©File( $file ); #my $empty = ©File( $file ); } } } } sub copyFile { my $filepath = shift; my @dir_parts = File::Spec->splitdir( $filepath ); my $file = pop @dir_parts; if (! -e "$destdir/$file") { # only if it doesnt exits print "Copying $file to $destdir/$file \n"; copy($filepath, "$destdir/$file") or warn "Cant copy file"; #return 1; } } sub cacheGet { my ( $function, @args ) = @_; # TODO: use a better "hash function" my $key = "function=$function;args=" . join( ",", @args ); if ( not defined $cache{$key} ) { $cache{$key} = [ &{$function}(@args) ]; } return $cache{$key}; } # make this $dir the path? sub searchFiles { my ( $dir, @extensions ) = @_; my @media_files; for my $ext (@extensions) { $ext = qr|\.$ext|i if $ext ne ""; push( @media_files, grep { m/$ext$/i } @{ &cacheGet( \&files, $dir ) } ); } return @media_files; } sub files { my $dir_orig = shift; my $dir = File::Spec->catdir( $dir_orig ); my $temppath; my @files; opendir( DIR, $dir ) or return; for ( sort readdir(DIR) ) { next if $_ eq "." or $_ eq ".."; if ( -d "$dir/$_" ) { push( @files, &files("$dir_orig/$_")); #recursion for search } else { push( @files, "$dir_orig/$_" ); } } closedir(DIR); return @files; }