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

Probleme beim Auslesen einer Verzeichnisstruktur!

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
jason-duff
 2005-12-21 10:47
#61194 #61194
User since
2005-10-11
23 Artikel
BenutzerIn
[default_avatar]
hallo Leute ,
habe folgenden Code geschrieben:
ausgehend von einem Verzeichnis werden alle Unterverzeichnisse gesucht und samt dem pfad in einem array gespeichert
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
24
25
26
use strict; 
use File::Find;

my $var = '';
my @dirs = ();

my $startdir = '.';


sub process_item
{
next if $_ =~ /^\.\.?$/;

if (-d $_)
{
# Aus dem gesamten Pfad werden führende Punkte "../" entfernt
$var = $File::Find::name;
$var =~ s/^\.\.?\///;

push (@dirs, $var);
}
}

find(\&process_item, $startdir);

print join("\n", (@dirs);

ich bekomme dann zb folgende ausgabe:

root/Unterordner1
root/Unterordner1/unterUnterverzeichnis1
root/Unterordner2
root/Unterordner2/unterUnterverzeichnis2

Die dateien die ich später auslesen möchte befinden sich aber in den Verzeichnissen "unterUnterverzeichnis1" und "unterUnterverzeichnis2".
In dem array sind die Pfadeangaben
"root/Unterordner1" und "root/Unterordner2" für die verarbeitung nicht wichtig da ja keine Dateien darin sind.

denn ich möchte jetzt in einer Schleife alle Dateien aus denn Verzeichnissen die im @dirs stehen rekursiv in einem array einlesen und dann mit diesen Dateien weiterarbeiten.
Code: (dl )
1
2
3
4
5
6
7
8
9
for my $folder (@dirs) 
{
opendir(DIR, $folder ))
my @files = readdir(DIR);
closedir(DIR);
.
#files berarbeiten
.
}

da aber in $folder auch die Pfadangabe "root/Unterordner2 " vorkommt, findet er natürlich keine Dateien darin.

wie kann ich dieses Problem lösen , das er mir wirklich nur die Pfadangaben in dem array @dirs auflistet in dem auch nur Dateien drin sind.
wäre echt froh wenn jemand ne idee hat... gruss jason
nepos
 2005-12-21 10:53
#61195 #61195
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Warum nutzt du File::Find nicht gleich dazu, die Dateien zu suchen statt nur der Verzeichnisse?
jason-duff
 2005-12-21 11:35
#61196 #61196
User since
2005-10-11
23 Artikel
BenutzerIn
[default_avatar]
hallo,

ich brauche die Verzeichnisse um den Pfad zu dem bestimmten Ordner zu bilden in dem die benötigten Dateien drin sind.

Wenn ich diese Dteien dann verarbeitet habe, kommt der nächste Ordner usw...

gruss jason
renee
 2005-12-21 11:41
#61197 #61197
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Haeh??

Kannst Du mal beschreiben, ob es dabei ein paar Regeln gibt, wonach sich dieser Pfad zusammensetzt??

Ich glaube, ich kapier Dein Problem noch nicht so ganz...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-12-21 11:45
#61198 #61198
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir auch CPAN:File::Find::Rule weiter...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jason-duff
 2005-12-21 11:49
#61199 #61199
User since
2005-10-11
23 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub process_item 
{
# Einträge "." und ".." in Unterverzeichnissen überspringen!
next if $_ =~ /^\.\.?$/;

# prüfen, ob $_ auf ein Verzeichnis verweist
if (-d $_)
{
# Aus dem gesamten Pfad werden führende Punkte "../" entfernt
$var = $File::Find::name;
$var =~ s/^\.\.?\///;

# Verzeichnisname nebst Pfad in @dirs ablegen
push (@dirs, $var);
}
}


damit füge ich die Pfade in dem array. Ich erstelle den Pfad nicht selber , sondern hole es mir von $var = $File::Find::name, habs falsch erklärt sorry.
renee
 2005-12-21 12:14
#61200 #61200
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das ist mir schon klar, aber wenn Du mit CPAN:File::Find nach Dateien suchst, dann kannst Du den vollen Pfad auch mit $File::Find::name bekommen.

Bringt bei Dir ein
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;
use File::Find;

my $var = '';
my @files = ();
my $startdir = '.';

sub process_item{
push(@files,$File::Find::name) if(-f $File::Find::name);
}

find(\&process_item, $startdir);

print join("\n", (@files);
nicht das gewuenschte Ergebnis?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jason-duff
 2005-12-21 12:56
#61201 #61201
User since
2005-10-11
23 Artikel
BenutzerIn
[default_avatar]
hallo Renee,

danke erstmal für deine mühe. bin eintotaller Perlbeginner.
Ich versuche nochmal  zu erklären was ich will. Vielleicht mach ich es ja ganz falsch.

Folgendes:

Ich habe eine Verzeichnisstruktur die von einem anderen Script erstellt wird. Diese Struktur kann unterschiedlich sein und ist auch nicht bekannt.

Tief in der Struktur in irgendeinem Ordner sind Dateien *.rrd*
die ich in einem array einlesen möchte und verarbeiten will.Wenn diese Dateien von DIESEM Ordner bearbeitet sind, so soll er in einem anderen Ordner der Struktur reingehen und dort wieder Dateien holen und wieder verarbeiten. also Ordner für Ordner...

Nehmen wir mal an
die unbekannte Struktur sieht folgendermaßen aus.

root/Unterordner1/Ordner1
root/Unterordner2/Ordner2

Schritt 1: gehe in Ordner1 , hole *.rrd dateien.
Schritt 2: verarbeite sie (erzeuge aus dem *.rrd Bilder)
Schritt 3: speichere die Bilder ab.

Schritt 4: gehe in Ordner 2, hole alle hole *.rrd dateien.
usw...

Deshalb versuche ich ja erstmal die Struktur mit dem obigen Code in einem array einzulesen. und dann immer in den Pfaden reinzugehen die ja in dem array gespeichert sind und die Dateien zu holen...
hoffe ich konnte dir das Problem näher erklären..
will dir aber kein stress machen...

gruss Jason\n\n

<!--EDIT|jason-duff|1135162683-->
nepos
 2005-12-21 13:01
#61202 #61202
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Und wo liegt nun das Problem, gleich nur nach *.rrd Dateien zu suchen? Da hast du auch den kompletten Pfad dabei, den du dir da rausholen kannst und fuer andere Aktionen im Skript nutzen kannst. Und du sparst dir das Durchsuchen von Verzeichnissen, in denen keine rrd-Dateien sind...
jason-duff
 2005-12-21 13:12
#61203 #61203
User since
2005-10-11
23 Artikel
BenutzerIn
[default_avatar]
hallo,
die sache ist wenn ich nur *.rrd dateien suche dann holt er mir alle *.rrd dateien aus allen Ordnern.

Ich will aber *.rrd Dateien erstmal von einem Ordner bearbeiten. und dann vom zweiten Ordner usw...

naja Jungs , danke für eure Hilfe. ich weiss echt nicht wie ich das anstellen soll...
Muss halt jetzt rumprobieren....
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-12-21 10:47.