Xref: feenix.metronet.com comp.unix.questions:8632
Newsgroups: comp.unix.questions
Path: feenix.metronet.com!news.ecn.bgu.edu!usenet.ins.cwru.edu!howland.reston.ans.net!noc.near.net!uunet!boulder!wraeththu.cs.colorado.edu!tchrist
From: Tom Christiansen <
[email protected]>
Subject: Re: Finding files in search-paths -- how??
Message-ID: <
[email protected]>
Originator:
[email protected]
Sender:
[email protected] (The Daily Planet)
Nntp-Posting-Host: wraeththu.cs.colorado.edu
Reply-To:
[email protected] (Tom Christiansen)
Organization: University of Colorado, Boulder
References: <
[email protected]>
Date: Wed, 28 Jul 1993 16:59:46 GMT
Lines: 47
From the keyboard of
[email protected] (Allen Chen):
:I think this should be a simple thing to do, but no one around here seems
:to know! So, how would I search for files in my search-path (without
:actually going into each path maunally, etc...)? Is there a command for
:this or would I have to use find? As far as I have been able to tell, the
:search-path only gets searched when trying to execute a file...
:Thanks in advance!
Here's the "wh" command I use:
#!/usr/bin/perl
foreach $file (@ARGV) {
foreach $dir (split(/:/,$ENV{PATH})) {
-x ($path="$dir/$file") && print "$path\n";
}
}
Another intersting one is pgrep, or pathgrep:
#!/usr/bin/perl
chop($cwd = `pwd`) unless $cwd = $ENV{PWD};
$regexp = shift || die "usage: $0 regexp\n";
for $dir (split(/:/,$ENV{PATH})) {
chdir($dir =~ m#^/# ? $dir : "$cwd/$dir") || next;
opendir(DOT, '.') || next;
while ($_ = readdir(DOT)) {
next unless -f;
next unless -x _;
next unless /$regexp/o;
print "$dir/$_\n";
}
}
Here's another, much faster version of pgrep, but arguably less correct.
#!/usr/bin/perl
$regexp = shift || die "usage: $0 regexp\n";
for $dir (split(/:/,$ENV{PATH})) {
opendir(DOT, $dir) || next;
while ($_ = readdir(DOT)) {
next unless /$regexp/o;
print "$dir/$_\n";
}
}
--tom