Hi Adriano, Here is a start. You might have to adapt it somewhat for youe specific uses. It originated from a proplem Paul posed concernig a search for files of a given name on a single level of a directory tree, and greww from there. It's taken on a bit of random testion g code also. The indent function was born with this program, but never used in it. It has since been moved to a *.pm file.
Have Fun, Joseph #!/usr/bin/perl use warnings; #use strict; # Utility to search filenames and text in a given folder and all subdirectoies # Usage: DirTreeTest.pl -f|-t $baseDir $soughtFile # If the first parameter is -f, the utility returns all folders containg the given file. # If the first parameter is -t, the utility returns all files containg the given text. my $option = $ARGV[0]; my $baseDir = $ARGV[1]; my $soughtFile = $ARGV[2]; my $indentSize = 2; if ($option eq "-f") { ListDirectoriesContainingFile ($ARGV[1], $ARGV[2], 0); } elsif ($option eq "-t") { ListFilesContainingText ($ARGV[1], $ARGV[2], 0); } else { die "You must specify either -f or -t"; } sub ListDirectoriesContainingFile { my $currentDir = $_[0]; my $targetFile = $_[1]; my $indentation = $_[2]; my $DIR; opendir $DIR, $currentDir or die "Cannot opendir $currentDir: $!"; my $testFile = ""; while (my $file = readdir $DIR ) { $testFile = "$currentDir\\$file"; if ( -d $testFile) { my $go; if ($go = ($file ne "." and $file ne "..")) { if (-e "$testFile\\$targetFile") { print "Found in:\n---=>>$testFile\n"; } ListDirectoriesContainingFile("$testFile", $targetFile, $indentation + 2); } } } } sub ListFilesContainingText { my $currentDir = $_[0]; my $targetText = $_[1]; my $indentation = $_[2]; chomp $targetText; my $DIR; print "current directory is $currentDir\n"; opendir $DIR, $currentDir or die "Cannot opendir $currentDir: "; my $testFile = ""; my $file = ""; while (defined($file = readdir $DIR) and $file ne "") { $testFile = "$currentDir\\$file"; if ( $testFile and (-d $testFile)) { if ($file eq "\." || $file eq "\.\.") {; } else { ListFilesContainingText($testFile, $targetText, ($indentation + 2)); } } else { #print "file $testFile checked\n"; if ($file =~ /\..*\./) { print " ~~~> $testFile is ugly in form\n"; } open (SEEK_FILE, $testFile) or print "can not open $testFile\n"; my $lineNumber = 1; my $CurrentLine = <SEEK_FILE>; my $IsIt; while ($CurrentLine) { if ($IsIt = ($CurrentLine =~ /\b$targetText\b/)) { print "--=>> $testFile: $lineNumber \n"; print " |$CurrentLine \n"; #continue; } $lineNumber++; $CurrentLine = <SEEK_FILE>; } close SEEK_FILE; } } } sub indent { my ($indentation, $textString) = @_; my $indent = ""; $oneSpace = " "; for ($i = 0; $i < $indentation; $i++) { $indent = $indent.$oneSpace; } print "$indent$textString"; print "\n"; } Adriano Allora wrote: > I need to know, in the @ARGV, when a string is the name of a directory. > More precisely I'd like to write a script that: > > processes the files of the textes in a dir > extracts the list of the sub-directories in a dir > in each sub-dir processes the files of the textes > extracts the list of the sub-directories > in each sub-dir processes the files of the textes > extracts the list of >the sub-directories > and go on... > > Some advices? > > all'adr > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]