The find line that
you have won't work, unless you enclose the find command in
backticks (and are on Unix). See the documentation for the File::Find module
to see the proper way of doing a find from Perl. It's a standard module, so you wouldn't
have to install anything.
--ZZamboni
| [reply] [Watch: Dir/Any] |
use File::Find;
find(\&wanted, '$file');
sub wanted
{
$rlfile = `find2perl / -name $file -exec ls {} \;`;
}
I get the error: cant stat blah: no such file or directory.
How can I get $rlfile to equal the full path name to blah
(which is $file)?
| [reply] [Watch: Dir/Any] [d/l] |
You could use File::Find, which should already be installed: find(sub {print $File::Find::name if $_ eq 'blah'}, ".");
Another option is file globbing:my $blah = <*/blah>;
print $blah;
# Or if more than one
@blahs = <*/blah>;
print "$_\n" for @blahs;
| [reply] [Watch: Dir/Any] [d/l] [select] |
use File::Find;
$fullpath = `find $path/*/$file \;`;
where * is the day. Thanks for your help.
| [reply] [Watch: Dir/Any] [d/l] |
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
# the dir you're 'find'ing from
my $dir = shift || '.';
# the file you're looking for
my $file = 'blah';
# the results you want
my @results;
# the function you perform on each find value
sub looking_for_file
{
# push full filename to an array if file and name is $file
push(@results, $File::Find::name) if(-f $_ && $_ eq $file);
};
# the result you want, using File::Find::find()
# (not the external 'find' program)
find \&looking_for_file, $dir;
# print your results
print("my results are: @results\n");
In this example, you get an array (@array) with the values of each file found named 'blah'. unlike also, this should run on just about any platform.
I know my example was a bit lengthy, so here's a shorter version:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
# the shorter version
my @results;
find sub{-f $_ && $_ eq 'blah' &&
push(@results,$File::Find::name)}, shift || '.';
print("my results are: @results\n");
~Particle | [reply] [Watch: Dir/Any] [d/l] [select] |
Did you try 'grep --with-filenames'?
It works on gnu version (e.g. linux)
I have this alias for recursive grep:
alias Grep 'echo Recursive Grep:;find . -type f -exec fgrep --with-filename \!* \{\} \;' | [reply] [Watch: Dir/Any] |