#use strict; use warnings; use File::Find; no warnings 'File::Find'; my %dirs = (); my $startdir = '.'; sub filter_for_rrd { # filtere aus dem Verzeichnis alle rrd dateien heraus my @files = grep /.*\.rrd$/, @_; my @sorted_files = map{$_->[0]}sort{$a->[1] <=>$b->[1]}map{[$_,(split(/-|\./,$_))[-2]]}@files; # filtere alle Unterverzeichnisse heraus my @dirs = grep -d, @_; # falls rrd Dateien vorhanden waren, speichere das Verzeichnis # samt der Liste der Dateien in %dirs $dirs{$File::Find::dir} = \@sorted_files if (@sorted_files); # gib für File::Find die Liste der Verzeichnisse und der rrd Dateien # zurück return @dirs,@sorted_files; } sub process_rrd { if (-f $_) { # bearbeite einzelne rrd Datei hier, oder lasse die ganze # process_rrd Subroutine einfach leer. } } find({ preprocess => \&filter_for_rrd, wanted => \&process_rrd }, $startdir); # %dirs enthält jetzt einen Hash, dessen keys die Pfade zu allen # Verzeichnissen mit rrd Dateien sind und dessen values jeweils # Referenzen auf Arrays mit den rrd Dateien sind. use Data::Dumper; print Dumper \%dirs;