Archiv verlassen und diese Seite im Standarddesign anzeigen : rekursiv suchen / perl
belubaba
24.10.2006, 10: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, 10: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, 10: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
#!/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.
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...
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.