Grep Guru

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Jun 9 14:25:12 UTC 2008


On Sun, 8 Jun 2008 16:07:12 -0700, Bill Campbell <freebsd at celestial.com> wrote:
> On Mon, Jun 09, 2008, Raphael Becker wrote:
>>On Sun, Jun 08, 2008 at 10:15:50PM +0200, Wojciech Puchar wrote:
>>> find . -type f -print0|xargs -0 grep <grepoptions> <text to search>
>>
>>There's no more need for find | xargs
>>
>>Try:
>>
>>find . -type -f -exec grep <grepoptions> <text to search> {} \+
>>
>>-exec foo {} \+ behaves like xargs foo
>>-exec foo {} \; exec foo for every file
>
> The issue here is that grep execs grep for each file found while
> xargs batches the files.

The \+ trick behaves like xargs, so this shouldn't be an issue :)

> This is of particular importance if one wants to see the file
> names in the output.

You can ensure the same even if xargs picks up a single file to grep
with

    xargs -0 grep pattern /dev/null

This will cost an open() / read() pair for each batch of files, but it
ensures that grep will always see at least two file names, and it should
print the filename of any matching files.



More information about the freebsd-questions mailing list