Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12292[/thread]

Mehrere Verzeichnisse durchsuchen?!



<< >> 4 Einträge, 1 Seite
yasukatakaya
 2008-08-04 13:45
#113061 #113061
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe folgendes Problemchen und zwar will ich alle Dateien in einem Ordner z.B. der test heißt und sich
in diesem Ordner viele andere Ordner sich befinden, die z.B. so heißen
0115
0201
0222
0303
0402
0529
0612
0703
0729
Es befinden sich auch Dateien in diesen Verzeichnissen, nun die Frage kann ich z.B. vom Ordner 0201 bis 0529 nach Dateien suchen (egal welche Dateien), ohne die Verzeichnisse, die sich dazwischen befinden zu definieren, also sozusagen kleiner, größer Vergleich, geht sowas???

Ich danke schon mal im Voraus!
nepos
 2008-08-04 13:50
#113062 #113062
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, eventuell mit CPAN:File::Find bzw. CPAN:File::Find::Rule.
Wobei mir zumindest bei File::Find nichts einfällt, wie man verhindert, dass er ein Verzeichnis durchsucht.
yasukatakaya
 2008-08-04 14:02
#113065 #113065
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Moin,
ich glaub ich habs raus, es werden die richtigen Ordner ausgegeben und zwas so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my $anfangsDatum = "0201";

my $endDatum = "0612";

my $pfadUrsprung = "C:/Documents and Settings/Desktop/testordner";


opendir(DIR, $pfadUrsprung);
my @Eintraege = readdir(DIR);
closedir(DIR);

foreach(@Eintraege)
{
#le heißt >= und ge heißt <=
if($_ ge $anfangsDatum or $_ le $endDatum)
{
print "$_\n";
}
}
MatthiasW
 2008-08-04 14:46
#113066 #113066
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Naja, darauf verlassen kannst du dich nicht, denn le und gt sind für den alphanumerischen Vergleich zuständig: 0 < 9 < A < Z < a < z.
Ansonsten ist es günstig den Monat vorran zu stellen, ich weiß natürlich nicht, ob du es schon so machst.
Hier noch ein Beispiel wie man das machen könnte:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

use strict;
use warnings;

opendir( DH1, 'test' ) or die "test:$!";

foreach ( sort { $a <=> $b } grep { -d "test/$_" and $_ =~ /^\d+/ } readdir( DH1 ) )
{
next unless /0201/ .. /0529/;

my $dir = "test/$_";
opendir( DH2, $dir ) or die "$dir:$!";

foreach my $file ( grep { -f "$dir/$_" } readdir( DH2 ) )
{
print "Dir: $dir\tFile: $file\t\t$dir/$file\n";
} # foreach

closedir( DH2 );
} # foreach

closedir( DH1 );

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< >> 4 Einträge, 1 Seite



View all threads created 2008-08-04 13:45.