Whenever people talk about ack, there’s always a discussion of whether ack is faster than grep, and how much faster, and people provide data points that show “I searched this tree with find+grep in 8.3 seconds, and it took ack 11.5 seconds”. Thing is, that doesn’t take into account the amount of time it takes to type the command.
How much faster is it to type an ack command line vs. a find+xargs line? I wanted to time myself.
Inspired by this tweet by @climagic, I wanted to find out for myself. I used
time read to see how long it would take me to type three different command lines.
The three command lines are:
A: ack --perl foo
B: find . -name '*.php' | xargs grep foo
C: find . -name '*.pl' -o -name '*.pm' | xargs grep foo
So I tried it out using
time read. Note that it’s not actually executing the command, but measuring how long it takes to hit Enter.
$ time read find . -name '*.pl' -o -name '*.pm' | xargs grep foo real 0m8.648s user 0m0.000s sys 0m0.000s
For me, my timings came out to average about 1.4s for A, 6.1s for B and 8.6s for C. That was with practice. I also found that it is nearly impossible for me to type the punctuation-heavy B and C lines without making typos and having to correct them.
So I ask of you, dear readers, would you please try this little experiment yourself, and then post your results in the comments? Just give me numbers for A, B and C and then also include the name of your favorite Beatle so I know you actually read this. Also, if you have any insights as to why you think your results came out the way they did, please let me know.
At this point I’m just collecting data. It’s imperfect, but I’m OK with that.
- Yes, I’m sure there’s another way I could do this timing. It might even be “better”, for some values of “better”.
- Yes, I know that I’m asking people to report their own data and there may be observational bias.
- Yes, I know I’m excluding Windows users from my sample.
- Yes, I know it’s possible to create shell aliases for long command lines.
- Yes, I know that the find command lines should be using
- Yes, I know that some shells have globbing like
Note: I’ve heard from a zsh user that
time doesn’t work for this because it’s a shell function, but
/usr/bin/time does work.
Thanks for your help! I’ll report on results in a future post.