Bestimmte Dateien eines Ordners suchen - Suchen nach Dateiendungen - Beispiel aus der Praxis
Oft steht man vor dem Problem, daß man aus einem bestimmten Ordner alle Dateien eines bestimmten Typs suchen muß. Natürlich ging auch mir das schon öfters so, also hab ich mir eine kleine Funktion gestrickt, die mir alle Dateien zurückgibt.
sub alle_dateien{
# Parameter 1: Ordnername, relativ zum Script
# Parameter 2: Endung ohne .
# gibt alle Dateien als Array zurück (unsortiert)
# $endung = leer : Alle Dateien zurückgeben
my $ordner=shift; my $endung=shift;
die "Kein Ordner angegeben" if ($ordner eq '');
if ($endung ne ''){
$endung=~ s/^\.//;
$endung='\.'.$endung;
}
local *in;
opendir (in,"$ordner") || die "Can not open directory $ordner: $!";
Beschreibung
Nach dem Aufruf der Funktion alle_dateien werden die Parameter $ordner und $endung eingelesen. Sollte $ordner leer sein, so wird das Programm abgebrochen.
Falls $endung leer ist, werden alle Dateien zurückgegeben, falls nicht und irrtümlicher Weise ein . mit angegeben wurde, wird dieser entfernt. Danach wird der Punkt explizit wieder vorangestellt.
Interessant hierbei ist, daß der \ vor dem Punkt mit angegeben wird, da ansonsten der Punkt in der späteren RegEx wie ein normaler Punkt, also gültig für alle Zeichen, angesehen wird. Kleine Stolperfalle, wenn man nicht drauf achtet...
Wenn dann so weit alles schön ist wird das Verzeichnis geöffnet. Zum Schluß wird mittels grep jeder einzelne Eintrag auf die korrekte Endung geprüft und zusätzlich, ob die Datei ein Ordner ist. Falls die Datei ein Ordner ist, wird sie nicht mit ins Ergebnis übernommen.
Kommentare zum Beitrag "Bestimmte Dateien eines Ordners suchen - Aus der Praxis - Suchen nach Dateiendung
"
Kommentar von Writer
Cool, gutes Beispiel
Kommentar von Stefan B.
Schneller kommt man mit der Funktion glob() ans Ziel:
#!/usr/bin/perl
use strict;
my @files = glob('./*.txt');
print join("\n", @files);
Da dies auf C-Funktionen zurueckgreift sollte es auch etwas schneller sein.