Thread File::Find Probleme (38 answers)
Opened by HeLLo1001W at 2012-11-27 11:10

Linuxer
 2012-11-27 19:21
#163687 #163687
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
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!

View full thread File::Find Probleme