home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / rexxlb.zip / SAMPLES / RXGREP.CMD < prev    next >
OS/2 REXX Batch file  |  1993-02-05  |  2KB  |  69 lines

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /* RXGREP: recursive file search using regular expressions. Searches         */
  4. /* specified directory and all subdirectories for files which contain        */
  5. /* strings that match a regular expression pattern.                          */
  6. /*                                                                           */
  7. /* Requires Personal REXX or REXXLIB (dosdir, dosdirpos, doscd, dosdrive,    */
  8. /* filesearch, upper, parsefn functions).                                    */
  9. /*                                                                           */
  10. /* Command format: RXGREP <filespec> <pattern>                               */
  11. /*                                                                           */
  12. /*****************************************************************************/
  13.  
  14. argstring = arg(1)
  15. if pos('"', argstring) \= 0 then
  16.     parse var argstring filename '"' pattern '"' .
  17. else
  18.     parse var argstring filename pattern .
  19. if pattern = '' then do
  20.     say 'Search pattern not specified.'
  21.     exit
  22.     end
  23.  
  24. call searchdir filename
  25. return
  26.  
  27. searchdir: procedure expose pattern
  28. filename = arg(1)
  29. parse value parsedname(filename) with drive ',' path ',' fileid
  30. fpath = drive':'path
  31. filename = fpath||fileid
  32. say 'Searching' filename 'for' pattern
  33. file = dosdir(filename, 'n')
  34. do while file \= ''
  35.     if filesearch(fpath||file, pattern, 'foo', 'e') \= 0 then
  36.         say '  'file
  37.     file = dosdir(, 'n')
  38.     end
  39. subdir = fpath'*.*'
  40. dir = dosdir(subdir, 'n', 'd', 'd')
  41. do while dir \= ''
  42.     pos = dosdirpos()
  43.     if dir \= '.' & dir \= '..' then
  44.         call searchdir fpath||dir'\'fileid
  45.     dir = dosdir(, 'n', 'd', 'd', pos)
  46.     end
  47. return
  48.  
  49. /* parse a file identifier */
  50. parsedname: procedure
  51. x = upper(arg(1))
  52. parsed = parsefn(x)
  53. if parsed = '' then
  54.     parsed = '- - - -'
  55. parse var parsed drive path fn ft
  56. if drive = '-' then
  57.     drive = dosdrive()
  58. if path = '-' then
  59.     path = doscd(drive)
  60. if right(path,1) \= '\' then
  61.     path = path'\'
  62. if fn = '-' then
  63.     fileid = '*.*'
  64. else if ft = '-' then
  65.     fileid = fn
  66. else
  67.     fileid = fn'.'ft
  68. return drive','path','fileid
  69.