#!/usr/bin/perl use strict; use warnings; my $searchstring = "usr/include/malloc.h"; my $searchdir = $ARGV[0]; my $file_counter=0; my $line_counter=0; my $error=recDir($searchdir, $searchstring, \$file_counter, \$line_counter); printf ( "%04u Errors occured!\n", $error ) if($error); printf ( "searched files: %06u\n", $file_counter ); printf ( "searched lines: %06u\n", $line_counter ); ######################################################################## # Functions ############################################################ ######################################################################## sub recDir { my $path=shift(@_); my $search=shift(@_); my $filecnt=shift(@_); my $linecnt=shift(@_); my $error=0; if ( opendir (my $DIR, $path) ) { my @next_dirs; while( my $file=readdir( $DIR ) ) { # . und .. überspringen next if($file eq '.' or $file eq '..'); # neuen pfad konstruieren my $new_path="$path/$file"; # wenn Verzeichnis, # dann in die Liste und nächster Name if(-d $new_path) { push(@next_dirs, $new_path); next; } # wenn Datei und Endung ".d" if(-f $new_path and $file=~/\.d$/) { # gesamten Zähler erhöhen $$filecnt++; # Ausgabe wo man gerade ist. printf ( "\n06u.) found %s \n", $$filecnt, $new_path ); # Datei öffnen und prüfen if(open(my $fh, '<', $new_path)) { my $found=0; while( my $line=<$fh> ) { $$linecnt++; # wenn der Suchstring vorhanden, # dann dann found=1 und Suche abbrechen if( index($line,$search) != -1) { $found++; last; } } # Datei schließen close($fh); # Ausgabe des Suchergebnisses if($found) { printf ( "\nSearchstring found in %s\n", $file ); } else { printf ( "\nSearchstring not found in %s\n", $file ); } } else { warn "Can't open $new_path ($!)\n"; $error++; } } } $error += recDir($_,$search,$filecnt,$linecnt) for(@next_dirs); } else { warn "can't open Dir $path ($!)\n"; $error++; } return $error; }