[Discuss] SysVinit vs. systemd
Bill Ricker
bill.n1vux at gmail.com
Thu Sep 11 11:46:14 EDT 2014
On Thu, Sep 11, 2014 at 8:42 AM, Edward Ned Harvey (blu)
<blu at nedharvey.com> wrote:
> 1- For example, you can do something like
> "find somedir -type f -exec grep -l somestring {} \;"
> and this adheres to the above principles ...
> So then the makers of grep realized they're getting thousands of new
> processes spawned and wasting a lot of time, so now you can equivalently
> do "grep -lr somestring somedir" which is simpler, more compact, easier to
> read/write, and also much faster, because it's integrated.
The original Bell Labs proponents of "do one thing well" accepted that
an inefficient shell idiom exposed a new need for a new "one thing" to
be done, and that the idiom was a prototype for a new feature that
would "do" the new "one thing" "well". Indeed, Bell team added ls -srt
quite early, as it was demonstrated as being needed (to avoid alias
lss, lst, lssr, lsstr ...).
Whether the needed new feature that is implemented as an added grep -r
flag or a (hypothetical) find -grep flag or the 'ack' command is a
separate matter of taste.
(I recommend ack, but that's *my* personal taste.
http://beyondgrep.com/ . If you never use real Unix, go ahead and get
reliant upon Gnu extensions.)
( Tangential note:
There is a "do one thing well" composite solution to find-grep performance too :
find ... -print0 | xargs -0 ...
is generally superior to
find ... -exec ... ';'
This can reduce number of spawns by factor of e.g. 900 to 3000 in a
modern shell on modern kernel !
$ find . -type f -print0 | xargs -0 perl -E 'say $#ARGV;' # how many args per
$ find . -type f -name '*.c' -print0 | xargs -0 grep -i '#include' #
or whatever
[ Sadly with Win/Mac inspired "spaces in file and directory name for
human readability" conventions, the -0 is required for reliability,
but find and xargs defaults were set when people knew not to do that.
*sigh* ]
)
I wonder which "makers of grep" added -r ? I'm guessing it was Team
Gnu; it's not a POSIX flag[*]. The SysIII/V, BSD, and Gnu teams all
added a lot of flag features to the core executables and built-ins,
but Gnu team style is furthest removed from the "do one thing well"
style of Bell Labs through v6, PWB, & v7.
[*] http://pubs.opengroup.org/onlinepubs/009695399/utilities/grep.html
--
Bill Ricker
bill.n1vux at gmail.com
https://www.linkedin.com/in/n1vux
More information about the Discuss
mailing list