• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Mit Perl Verzeichnis auslesen

Hi Leute,

bin Perl-Neuling und wollte euch fragen ob ihr mir bei folgendem Problem helfen könnt:
Ich möchte von root aus jedes Verzeichnis nacheinander öffnen und die Daten dort ausgeben. Habe bis jetzt nichts im Internet gefunden.

Danke, für eure Hilfe!

lg,
Kandi
 
OP
Kandi
danke für deinen kleinen Tip,

aber den Befehl kenne ich schon. Das Problem ist der Parameter dieser Funktionen. Es soll ja automatisch das nächste Unterverzeichnis öffnen.
 
Hallo,

folgendes müsste noch gehen!

Alle Verzeichnisse in ein Array einlesen und dann mittels einer foreach - Schleife und einem opendir durch alle Verzeichnisse gehen!

Nachteil dieser Brutalo - Aktion, es liesst alles in ein Array ein und dadurch kommt es zu Geschwindigkeitsverlusten (aber nicht markanten!).

Mfg
Byron
 
OP
Kandi
byron1778 schrieb:
Hallo,

folgendes müsste noch gehen!

Alle Verzeichnisse in ein Array einlesen und dann mittels einer foreach - Schleife und einem opendir durch alle Verzeichnisse gehen!

Nachteil dieser Brutalo - Aktion, es liesst alles in ein Array ein und dadurch kommt es zu Geschwindigkeitsverlusten (aber nicht markanten!).

Mfg
Byron

Und WIE mache ich "Alle Verzeichnisse in ein Array einlesen"?
 
Leider habe ich mit Perl schon sehr lange nichts mehr getan, aber so ca. sollte es gehen!

Code:
@array=qw{/ usr bin mnt root home etc} //selber vervollständigen bitte

foreach(@array) {
opendir ...
readdir ...
};

So ca. sollte es funktionieren, aber um den genauen Beweis zu erbringen, müsste ich mich erst wieder in Perl einlesen!
Auch diese Variante könnte funktionieren, Sie ist vermutlich auch besser!


Code:
while(opendir(DIR, "/") != "." && ".."))

{

readdir ...

}
 
OP
Kandi
danke vielmals.

Jetzt habe ich gerade dies hier versucht und eine Endlosschleife bekommen. Was stimmt hier nicht?

Code:
while(opendir(DIR, "/") != "." && "..") {
	my @Dateien = readdir(DIR);
	closedir(DIR);
	foreach $filename(@Dateien) {
		print $filename."\n";
	}
}
 
Dachte ich mir schon anfangs, dass es zu einer Endlosschleofe kommen wird.
Nachdem er alles aussparrt, das "." && ".." ist, muss er zwangsweise in eine Endlosschleife gelangen!

Um dieses Problem abzufangen, kann man viell. folgendes probieren!

Code:
while(opendir(DIR, "/") != EOF) { 
   my @Dateien = readdir(DIR); 
   closedir(DIR); 
   foreach $filename(@Dateien) { 
      print $filename."\n"; 
   } 
}

Mit EOF sollte er nicht mehr in eine Endlosschleife geraten, aber ich weiss nicht, ob er über die Verzeichnisse dann hinwegkommt. Es kann sein, dass er, sobald er das erste Verzeichnis durch hat, dann abbricht!

Einfach bitte austesten!
 
Kandi schrieb:
Hi Leute,

bin Perl-Neuling und wollte euch fragen ob ihr mir bei folgendem Problem helfen könnt:
Ich möchte von root aus jedes Verzeichnis nacheinander öffnen und die Daten dort ausgeben. Habe bis jetzt nichts im Internet gefunden.

Danke, für eure Hilfe!

lg,
Kandi
Was hast du denn genau vor? Willst du dir einfach nur die Emails oder Dateinamen auf der Konsole ausgeben?
Kannst du dein Problem evtl. etwas näher beschreiben? Evtl. kann man das ganze einfach per BASH lösen.


}-Tux-{
 
Nee, im Ernst: Schau mal in
Code:
perldoc File::Find
Z.B.:
Code:
#!/usr/bin/perl
use warnings;
use strict; 

use File::Find;
find(\&a,"/");

sub a
{
print $_."\n" 
}

Viele Grüße
 
byron1778 schrieb:
Mit EOF sollte er nicht mehr in eine Endlosschleife geraten, aber ich weiss nicht, ob er über die Verzeichnisse dann hinwegkommt. Es kann sein, dass er, sobald er das erste Verzeichnis durch hat, dann abbricht!
Wo kommt den bloß das EOF her? Nur C hat das, und dann auch noch in einem anderen Kontext.
Code:
opendir(FH, "blafasel") || die "so ein mist heute";
while(defined($name = readdir(FH))) {
    &tu_was();
}
 
Dachte mir Perl kennt auch EOF.
Tja, so kann man sich eben täuschen!
Aber wie bereits oben angemerkt, habe ich schon sehr lange nichts mehr in Perl getan.
 
OP
Kandi
@ }-Tux-{
ich möchte auf meinem linux server zum Beispiel alle txt,csv,xls Files die älter als ein Jahr sind löschen.
 
Oben