Skip to main content

Dateien und Verzeichnisse rekursiv verarbeiten

Diese Snippet verarbeitet Dateien und Verzeichnisse und steigt dabei auch in Unterverzeichnisse ein. Gibt den Filenamen aus wenn eine Datei gefunden wurde. Wenn ein Verzeichnis gefunden wurde wird der Name aufgerufen und DoDir rekursiv aufgerufen.

my $root = "/home/user";
DoDir($root);
 
sub DoDir {
  my $dir = shift;
  my $file;
  opendir(DIR, $dir) || die "Unable to open $dir: $!";
  my(@files) = grep {!/^\.\.?$/ } readdir(DIR);
  closedir(DIR);
  foreach (@files) {
    if (-d ($file = "$dir\\$_")) {
      print "Found a directory: $file\n";
      DoDir($file);
    } else {
      print "File: $file\n";
    }
  }
}

für UNIX muss etwas umgebaut werden:

my $root = "/home/user";
DoDir($root);
 
sub DoDir {
  my $dir = shift;
  my $file;
  opendir(DIR, $dir) || die "Unable to open $dir: $!";
  my(@files) = grep {!/^\.\.?$/ } readdir(DIR);
  closedir(DIR);
  foreach (@files) {
    if (-d ($file = "$dir/$_")) {
      print "Found a directory: $file\n";
      DoDir($file);
    } else {
      print "File: $file\n";
    }
  }
}