Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: traverse directory recursively and search for pattern

by rjt (Deacon)
on Mar 20, 2013 at 03:58 UTC ( #1024425=note: print w/ replies, xml ) Need Help??

in reply to traverse directory recursively and search for pattern

File::DirWalk makes the directory recursion easy. Perl's builtins trivialize the rest. The canonical way to use DirWalk is something like so:

#!/usr/bin/env perl use 5.014; use warnings; use File::DirWalk; # Process commandline arguments die "usage: $0 pattern path ..." if (@ARGV < 2); my $pattern = shift; # @ARGV now contains one or more paths to recurse # Set up DirWalk object with callback to grep each file my $dw = new File::DirWalk; $dw->onFile(sub { my $file = shift; if (-T $file) { open my $fh, '<', $file or die "Can't open $file: $!"; print map { "$file: $_" } grep { /$pattern/ } <$fh>; close $fh; } return File::DirWalk::SUCCESS; }); $dw->walk($_) for @ARGV;

The above gives you a very simple grep -R command. Probably more instructive than directly useful.

The -T operator is one of Perl's file test operators that evaluates to true if the file is an ASCII text file (based on some heuristic guesswork). There is an equivalent -B test for binary files.

Comment on Re: traverse directory recursively and search for pattern
Select or Download Code

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1024425]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (12)
As of 2014-10-23 13:03 GMT
Find Nodes?
    Voting Booth?

    For retirement, I am banking on:

    Results (125 votes), past polls