Subject: Re: Recursive grep (find, xargs, etc)
To: None <current-users@NetBSD.ORG>
From: Brian C. Grayson <bgrayson@pine.ece.utexas.edu>
List: current-users
Date: 01/29/1996 22:39:37
> Or how about
> 
> netbsd4me:1:34 [/tmp] % ls -l test
> total 0
> -rw-r--r--  1 earle  wheel  0 Jan 23 14:13 This file has spaces in it
> netbsd4me:1:35 [/tmp] % find . -type f -print | xargs egrep -l foo
> egrep: ./test/This: No such file or directory
> egrep: file: No such file or directory
> egrep: has: No such file or directory
> egrep: spaces: No such file or directory
> egrep: in: No such file or directory
> egrep: it: No such file or directory
> 
> or
> 
> netbsd4me:1:36 [/tmp] % touch test/MAE\ User\'s\ Guide
> netbsd4me:1:37 [/tmp] % find . -type f -print | xargs egrep -l foo
> xargs: unterminated quote

  Granted, 'find' and 'xargs' may not handle these files gracefully yet,
but there is a way to tell 'find' to check for these situations -- the -X
option.  From the frequently-used-by-me-because-I'm-a-clueless-newbie man
pages:

     -X      The -X option is a modification to permit find to be safely used
             in conjunction with xargs(1).  If a file name contains any of the
             delimiting characters used by xargs,  a diagnostic message is
             displayed on standard error, and the file is skipped.  The delim-
             iting characters include single (`` ' '') and double (`` " '')
             quotes, backslash (``\''), space, tab and newline characters.

  Here's sample output for the situation above:

<marvin>:(10:28pm) test:1 % find -X . -type f -print | xargs egrep -l foo
find: ./This file has spaces in it: illegal path
<marvin>:(10:28pm) test:2 % 
(The MAE\ User\'s\ Guide case is also detected, BTW)
  If nothing else, it's handier to have a one-line error message than a
multiple-line error message that doesn't convey any more information --
less 'warning-bloat' on the screen!  It's also a better error message than
the one that the xargs command would print out.

  Just my $.02.

  Brian
-- 
Brian Grayson (bgrayson@ece.utexas.edu)
Graduate Student, Electrical and Computer Engineering
The University of Texas at Austin
Office:  ENS 406       (512) 471-8011
Finger bgrayson@pine.ece.utexas.edu for PGP key.