home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
rexxlb.zip
/
SAMPLES
/
RXGREP.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1993-02-05
|
2KB
|
69 lines
/*****************************************************************************/
/* */
/* RXGREP: recursive file search using regular expressions. Searches */
/* specified directory and all subdirectories for files which contain */
/* strings that match a regular expression pattern. */
/* */
/* Requires Personal REXX or REXXLIB (dosdir, dosdirpos, doscd, dosdrive, */
/* filesearch, upper, parsefn functions). */
/* */
/* Command format: RXGREP <filespec> <pattern> */
/* */
/*****************************************************************************/
argstring = arg(1)
if pos('"', argstring) \= 0 then
parse var argstring filename '"' pattern '"' .
else
parse var argstring filename pattern .
if pattern = '' then do
say 'Search pattern not specified.'
exit
end
call searchdir filename
return
searchdir: procedure expose pattern
filename = arg(1)
parse value parsedname(filename) with drive ',' path ',' fileid
fpath = drive':'path
filename = fpath||fileid
say 'Searching' filename 'for' pattern
file = dosdir(filename, 'n')
do while file \= ''
if filesearch(fpath||file, pattern, 'foo', 'e') \= 0 then
say ' 'file
file = dosdir(, 'n')
end
subdir = fpath'*.*'
dir = dosdir(subdir, 'n', 'd', 'd')
do while dir \= ''
pos = dosdirpos()
if dir \= '.' & dir \= '..' then
call searchdir fpath||dir'\'fileid
dir = dosdir(, 'n', 'd', 'd', pos)
end
return
/* parse a file identifier */
parsedname: procedure
x = upper(arg(1))
parsed = parsefn(x)
if parsed = '' then
parsed = '- - - -'
parse var parsed drive path fn ft
if drive = '-' then
drive = dosdrive()
if path = '-' then
path = doscd(drive)
if right(path,1) \= '\' then
path = path'\'
if fn = '-' then
fileid = '*.*'
else if ft = '-' then
fileid = fn
else
fileid = fn'.'ft
return drive','path','fileid