Thread File::Find Probleme
(38 answers)
Opened by HeLLo1001W at 2012-11-27 11:10
Hi,
warum fügst Du eigentlich einen Slash an den aktuell gefundenen Pfad an? Mit dem gezeigten Code wird das jedenfalls nicht klar und es ist hier überflüssig. $File::Find::no_chdir = 1; muss nicht für jeden gefundenen Eintrag neu gesetzt werden; das reicht einmal und dann sollte es gut sein. Wenn ein zu ignorierendes Verzeichnis dabei ist, würde ich die Subroutine direkt mit return verlassen, anstatt $file mit dem Leerstring zu überschreiben... Ich habe Dein Beispiel mal genommen und ein wenig umgeschrieben (Startverzeichnis und Ausschlußkriterien sind auf meine Umgebung angepasst). Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #!/usr/bin/perl #Libaries use strict; use warnings; use File::Find; #no warnings 'File::Find'; binmode(STDIN, ":encoding(cp437)"); binmode(STDOUT, ":encoding(cp437)"); #Variablendeklaration my $start = "I:/"; my @dirs; system('cls'); sub wanted { my $file = $File::Find::name; # Ausschluesse, was nicht verarbeitet werden soll return if $file =~ m{\$RECYCLE\.BIN} || $file =~ m{RECYCLER} || $file =~ m{System Volume Information} || !-d $file ; # wer es hierher geschafft hat, darf verarbeitet werden push @dirs, $file; } find( # Optionen einmal als HashRef uebergeben { wanted => \&wanted, no_chdir => 1, }, # Liste der Startverzeichnisse $start ); #Ausgabe aller Ordnerpfade print join( "\n", @dirs, '' ); foreach my $ordner ( @dirs ) { print $ordner . "\n"; } meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |