################### # Parameter # 0: Startdir ohne abschließendes /, aktuelles Verzeichnis = . # 1: Unterverzeichnisse durchsuchen? 1: ja, 0: nein # 2: Dateitypen in form .txt.htm.html , also direkt hintereinander, aber nur wenn nötig # # Neues Feature: # Es kann ab sofort auch ein hash erzeugt werden, der als keys den Dateinamen mit Ordner usw. hat UND als Value den Dateinamen selbst # 3: Nur kompletten Dateinamen oder Hash mit kompletten Dateiname und Dateinamen allein : 0 oder 1 # ansonsten wird alles gezeigt # # Einbindung per # require 'lib.pl'; # # # Aufruf per: # # @dateien=get_all_files('c:/htdocs/',1,'.shtml.htm.txt'); # # oder # # %dateien=get_all_files('c:/htdocs/',1,'.shtml.htm.txt',1); # # Autor: Peter Baumann # Dieses Script darf bei Nennung des Autors frei verwendet werden ############################################# sub get_all_files{ my $startdir=shift; my $include_subdirs=shift; my $endings=shift; my $extendet=shift; my %endings=(); $endings=~ s/\s//g; my @endings=split('\.',$endings); shift @endings; my $endings=0; $startdir=~ s/\/$//; if (@endings != 0){ $endings=1; # wenn Endungen angegeben foreach (@endings){ $endings{$_}=1; } } @endings=(); my @dateien=(); push (my @all_directories,$startdir); foreach my $akdir(@all_directories){ opendir (my $IN,$akdir); my @all=readdir($IN); closedir $IN; foreach my $akdatei (@all){ next if ($akdatei eq '..' || $akdatei eq '.'); if (-d "$akdir/$akdatei") { if ($include_subdirs == 1){ push (@all_directories,"$akdir/$akdatei"); next; } } else { if ($endings==0){ push (@dateien,"$akdir/$akdatei"); push (@dateien,$akdatei) if ($extendet == 1); } else { my $lastpoint=rindex($akdatei,"."); next if $lastpoint == -1; # Keine Dateiendung gefunden my $endung=substr($akdatei,$lastpoint+1-length($akdatei)); if ($endings{$endung} == 1){ push (@dateien,"$akdir/$akdatei"); push (@dateien,$akdatei) if ($extendet == 1); } } } } } return @dateien; } 1;