ggrep --devices=skip
Every now and then I'd like to (recursively) search for patterns in a directory tree. Since Solaris' grep(1) does not understand -r, I used SUNWggrep. But grep'ing through e.g. /etc never seems to come to an end, and truss(1) knows why:
$ /usr/sfw/bin/ggrep --version | head -1
grep (GNU grep) 2.5
$ truss -elfda /usr/sfw/bin/ggrep -D skip -r foo /etc
[...]
8341/1: 0.0448 open64("/etc/cron.d/FIFO", O_RDONLY) = 3
8341/1: 0.0454 fstat64(3, 0xFFBFFA78) = 0
8341/1: read(3, 0x00044000, 32768) (sleeping...)
Well, I won't comment on the fact that we have devices in /etc at all, but I explicitly told grep to skip devices. Apparently this option is just being ignored. Using the latest GNU/grep CVS checkout does help and the changelog does indeed mention a fix for the --devices option.Oh, of course: this could be done with find too, but GNU/grep is so much easier than:
$ find /etc -type f -exec grep foo '{}' +
Hint: add "-D skip" to your GREP_OPTIONS environment variable, that way it's passed to GNU/grep automatically.Update: a careful reader noticed that I confused
SUNWggrep and
SMCgrep - I did indeed and corrected it, finally. Thanks for the hint! For the record, the current version of SMCgrep does NOT have this problem, it's all good! :-)