I wouldn't say it's limited. xargs is well worth the effort to get proficient with so it rolls of the fingers.
Yes,it is different from old find(1); yes, it's taken this oldtime Unix graybeard a while to get with it, but it's worth it.
It's way less complex and more flexible than old find -exec, and bonus of it's interoperable with ack and most anything else that can stream stdout.
The separation of concerns is very much in the spirit of original Unix Shell Pipelines "Do One Thing Well" to divide the work of (commonest uses of) find -exec
into ack -[lgf] ... | xargs .
Ack 3
(Caveat: This won't do everything find(1) did, e.g. ack doesn't do -newer or link filtering.
ack's website BeyondGrep.com and coming cookbook document when to use something else.
The corollary of "Do one thing well" is to not try to do everything.
(BSD and GNU-Tools have sometimes forgotten that ...)
There are definitely Ack-like tasks I still use Perl one-liners for; e.g. -000 , -a $F[2] , //xism
)
FWIW,
Ack supports the same separation of concerns for itself with the -fgx options and has the same separation of concerns internally: Finding files by
delving through directories (and arguments/options) and then searching
text in files are in two different Perl Modules, and Andy is even
working on standardizing on different vocabulary for describing the two
behaviors (which I think I'm using correctly here).
(And Ack 3.0 will require separation into ack -g filepattern | ack -x textpattern rather than having two PCRE's on one commandline as allowed, confusingly, in ack 2.x.)