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";
    }
  }
}

Revision #2
Created 27 July 2021 09:56:57 by magenbrot
Updated 27 July 2021 09:59:07 by magenbrot