Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

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 contemplating the Monastery: (8)
As of 2015-11-30 12:38 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (770 votes), past polls