Ich habe eine Suchroutine mit Perl programmiert, die nach Eingabe eines Verzeichnisses und eines Suchbegriffs sämtliche Unterverzeichnisse absucht und die Dateien ausgibt, die die Zeichenfolge enthalten.
Leider funktioniert es nur wenn ich eine Dateiendung (z.B. .txt) eingebe. Kann mir jemand sagen was ich falsch mache ?
Hier mein Script:
print "Nach welcher Zeichenfolge soll gesucht werden ?\n";
print "Wenn es sich um eine Dateiendung haelt, bitte den Punkt mit\n";
print "eingeben. (z.B. .txt)\n";
$Zeichenfolge = <STDIN>;
$Zeichenfolge =~ s/./\./i; #### Bereitet den Punkt so auf, daß er im regulären Ausdruck in Zeile 40 berücksichtigt wird. ####
print "\nWie heisst das Oberverzeichnis, dass durchsucht werden soll ?\n";
$Oberverzeichnis = <STDIN>;
if($Oberverzeichnis =~ /\n/)
{
chop($Oberverzeichnis);
}
else
{exit;}
if($Zeichenfolge =~ /\n/)
{chop($Zeichenfolge);}
else
{exit;}
&suche("$Oberverzeichnis", "$Zeichenfolge"); #### Aufrufen des Unterprogramms suche und übergabe der ####
#### Variablen $Oberverzeichnis und $Zeichenfolge. ####
sub suche
{
my $verzeichnis = shift;
my $begriff = shift;
opendir (DIR,$verzeichnis) print "Verzeichnis ", $verzeichnis, " gibt es nicht.\n";
foreach (readdir(DIR))
{
if ($_ eq '.' $_ eq '..')
{next;}
else
{$fullname="$verzeichnis\$_";}
if (-d "$fullname") #### -d prüft ob es sich bei dem File um ein Verzeichnis handelt ####
{
&suche("$fullname", "$begriff");
}
elsif ($fullname =~ /$Zeichenfolge/) {print $fullname, "\t\t\t", -s ($fullname), " Bytes\n";}
}
}