#!/usr/bin/perl -w use strict; use Getopt::Std; use IO::File; use File::Find; use Text::Query; my %opts; getopts('a', \%opts); my $mode = $opts{a} ? "advanced_text" : "simple_text"; my ($dir, $query) = @ARGV; if(! defined $dir or ! -d $dir) { usage("Directory not specified or unreadable"); } if(! defined $query) { usage("No query given"); } my $q=Text::Query->new($query, -mode => $mode, ); find(sub { search_file($q) }, $dir); ################################################## sub search_file { ################################################## my ($q) = @_; my $file = $_; return unless -T $file; my $fh = IO::File->new("< $file"); if(! $fh) { warn "Cannot open '$File::Find::dir/$file'"; return 1; } my $data = join '', <$fh>; $fh->close; if($q->match($data)) { print "$File::Find::dir/$file\n"; } $_ = $file; } ################################################## sub usage { ################################################## my ($message) = @_; (my $prog = $0) =~ s#.*/##g; print <