PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rekursiv suchen / perl



belubaba
24.10.2006, 11:09
Hallo Zusammen,

ich habe ein reichlich banale Frage.
Kann Sie aber nicht lösen da ich keinen blassen Schimmer von Perl habe.

$MeinVerzeichnis
$MeinDateiNamePattern

Wie suche ich recursiv von $MeinVerzeichnis aus nach $MeinDateiNamePattern.

Als Ergebnis brauche ich:

./meinpfad/meineDatei.txt



Gruß und thx

b.

supersucker
24.10.2006, 11:14
Indem du in cpan nach einem Modul kuckst was genau das für dich macht.

Du kannst dir das natürlich auch selber schreiben, da du aber keinen Schimmer von Perl hast würde ich eher eine cpan-lösung nehmen.

Wolfgang
24.10.2006, 11:36
Hallo

Das richtige Modul nennt sich File::Find
Folgender Einzeiler sucht nach allen Dateien die /test/ enthalten.
Verzeichnisse werden nicht ausgegeben.


perl -MFile::Find -le 'find (sub{return if /^[.]+$/;print $File::Find::name if ((-f )&&(/test/))},"/home/wolle/temp")'


perldoc File::Find
:rtfm:
Gruß Wolfgang

Xanti
24.10.2006, 11:47
#!/usr/bin/perl

use strict;
use File::Find;

my $MeinVerzeichnis = "bspdir";
my $MeinDateiNamePattern = "muster";

sub match {print "$_\n" if /$MeinDateiNamePattern/}

find {wanted => \&match, no_chdir => 1}, $MeinVerzeichnis;


Gruss, Xanti

edit: Doh, Wolfgangs Lösung war schneller und besser.
$File::Find::name muss ich mir merken, da braucht man no_chdir nicht.

Jabo
24.10.2006, 11:50
Indem du in cpan nach einem Modul kuckst was genau das für dich macht.

Du kannst dir das natürlich auch selber schreiben, da du aber keinen Schimmer von Perl hast würde ich eher eine cpan-lösung nehmen.

Hallo,

ich hatte mir mal was gebaut, das sich rekursiv durch einen Verzeichnisbaum wühlt, alle Sonderzeichen in Dateinamen ersetzt, aber nicht im Original-File, sondern sozusagen "gespiegelt" in einer Struktur als Symlink ablegt.

Der Teil, der Verzeichnisse listet, sah so aus:


local ($searchdir) = $_[0];
print "Open $searchdir\n";
opendir(DIR, $searchdir);
local(@files) = readdir(DIR);
print "Filelist:\n\n\n";
print "Dirname=$searchdir\n";
for(@files){
print "-> $_";
if(-d "$searchdir$_"){
print " - (is directory)";
}
print "\n";
}
print "\n\n";
closedir DIR;

Das könnte man jetzt um-/ausbauen.

Der Vorschlag von Wolle ist aber eleganter...