find in conjuction with grep

Robert P. J. Day rpjday at mindspring.com
Wed Aug 11 19:26:00 UTC 2004


On Wed, 11 Aug 2004, Aaron Gaudio wrote:

> On Wed, 2004-08-11 at 14:51 -0400, Robert P. J. Day wrote:
>> On Wed, 11 Aug 2004, Alexander Dalloz wrote:
>>
>>> Am Mi, den 11.08.2004 schrieb Kevin Old um 20:31:
>>>
>>>> I've been using
>>>> find . -exec grep "phrase I want" {} \;
>>>
>>> Not the best way. Using -exec is problematic.
>>
>> why problematic?
>
> I think the main complaint is that it is slower, having to exec a new
> grep process for each file find encounters, versus piping to xargs
> (which will be faster overall, but provide less running feedback).

i was just about to post on just this issue.  if you want to process a 
bunch of files recursively (and the command itself doesn't support 
recursive operation), there's

1) find . -exec <cmd> etc etc ...

    drawback:  as above, a new exec for every single file.  blah.

2) <cmd> $(find . criteria here)

    let "find" do the work of finding the file names, and just run
    <cmd> once.  much faster, but ...

    drawback:  depending on the number of files, you could literally
    overflow the shell command line limit as the shell tries to
    construct the command.

    which leaves a compromise:

3) find <criteria> | xargs <cmd>

    grab a bunch of files at a time, and process them.  combines both
    of the benefits of the above, while avoiding the drawbacks.

of course, if the command has recursive behaviour, it's a no-brainer.

rday





More information about the fedora-list mailing list