On 04/05/2015 10:59 PM, Adam Thompson wrote:
I've found "find / -xdev -type f -print0 | xargs grep string /dev/null" to be completely reliable and reasonably portable. Not to mention a lot faster. Faster yet if you use any of the #NN arguments to xargs to batch the grep invocations.
I'd also use the xargs -r (or --no-run-if-empty) option, to avoid running the command if there are no args. (It may not particularly matter in this case, but it can sometimes be quite significant.)
I started doing that because every time I ran grep -r, it would just hang somewhere in /etc.
Yeah, that's been my experience as well...
On May 4, 2015 10:51:08 PM CDT, Trevor Cordes trevor@tecnopolis.ca wrote:
...
Or... I just RTFM and it looks like gnu grep solved the symlink problem already: -r, --recursive Read all files under each directory, recursively, following symbolic links only if they are on the command line. Note that if no file operand is given, grep searches the working directory. This is equivalent to the -d recurse option. -R, --dereference-recursive Read all files under each directory, recursively. Follow all sy! mbolic links, unlike -r. So that explains why I've never hit a symlink loop: I've never used -R (capital).
This if a more recent addition to GNU grep. E.g. on RHEL 6 systems, -R and -r are the same, and the man page makes no mention of special handling of symlinks. (Hence the possibility of loops and hanging.)