anaboe.net

File::Find: Verzeichnisse rekursiv einlesen

Zielstellung

Es soll ein Verzeichnis rekursiv nach Dateien eines bestimmten Musters durchsucht werden. Dabei kommt das Standard-Modul File::Find zum Einsatz.

Perl - Code

#!usr/bin/perl -w
use strict;
use warnings;
use File::Find;

my @files;
# finde alle Dateien mit der Erweiterung txt
my $muster = '.*txt';

find(\&bedingung, "dir1");
# die gesuchten Dateien stehen in @files
# und koennen weiterverarbeitet werden

sub bedingung {
  if ( $File::Find::name =~ /^$muster$/ ) {
    push(@files, $_);
  }
  return;
}

Erläuterungen

Das Modul File::Find durchsucht Verzeichnisse standardmäßig rekursiv. Für jeden gefundenen Eintrag stehen drei Variablen zur Verfügung: $_ enthält den vollständigen Pfad des gefundenen Eintrages einschließlich des Dateinamens, $File::Find::dir enthält das aktuelle Verzeichnis und $File::Find::name enthält den Namen der gefundenen Datei. Soll nicht rekursiv gesucht werden, ist in den meisten Fällen der Einsatz des Moduls nicht nötig, hier genügt der Einsatz der Perl-Funktionen für Verzeichnisse (opendir, readdir und closedir).

Siehe auch Dokumentation zu File::Find.