#!/usr/bin/perl -w ###################################################################### # (c) Michael Schilli 1999 ###################################################################### use File::Find; use strict; my ($startdir, $pattern) = @ARGV; # Kommandozeilen- # parameter holen # Kommandozeilenparameter prüfen (defined $startdir && defined $pattern) || usage(); (-d $startdir) || die "Cannot open directory $startdir"; # Traverse-Algorithmus anstoßen File::Find::find(\&fc, $startdir); ########################################################### sub fc { # Callback-Funktion my $file = $_; # Dateiname sichern return unless -f $file; # Keine Directories return unless -T _; # Nur Textdateien # Textsuche in der # Datei open(FILE, "<$file") || warn "Cannot open $file"; while() { if(/$pattern/o) { # Paßt? Datei und # Zeile ausgeben! print "$File::Find::dir/$file: $_"; } } close(FILE); $_ = $file; # $_ zurücksetzen } ########################################################### sub usage { # Meldung bei falschen # Kommandozeilenparametern $0 =~ s#.*/##g; # basename() für Skriptpfad # Win32: s#.*\\##g print "usage: $0 startdir pattern\n"; exit 0; # Programmabbruch }