Description of problem: If I do a grep in a directory which has for example more than 400 files, grep simply hangs up and returns no results, even if they match sure. Version-Release number of selected component (if applicable): grep-2.5.1-29 How reproducible: Every time, see above and below. Steps to Reproduce: 1. For example, install all (or more than 450) Fedora Core source RPMs ;-) 2. cd /usr/src/redhat/SPECS/ 3. grep Name * [4. Get the hangup] Actual results: Well, grep hangs up and doesn't speak with me - I've got a strace of such a grep attached. Expected results: Working grep, even if there are 500 or 1000 files in a directory ;-)
Created attachment 101964 [details] strace of "grep Name *" in /usr/src/redhat/SPECS with 442 files, canceled with Strg-C
execve("/bin/grep", ["grep", "Name", "-", "anaconda-help.spec", "anaconda.spec", [...] One of your files is named '-'. You need to use 'grep -- Name *'.
Doesn't make any sense here, the problem exists further on - the strace result seems to be the same, too. Hm...and the strange is, that a "grep Name *" or "grep -- Name *" through > 400 binary files runs immediately fine and without any problem: # cd /usr/src/redhat/RPMS/i386 # # ls -l | wc -l 484 # # grep Name * Binary file acl-2.2.7-4.i386.rpm matches Binary file anacron-2.3-31.i386.rpm matches Binary file apr-0.9.4-21.i386.rpm matches Binary file apr-devel-0.9.4-21.i386.rpm matches Binary file apr-util-0.9.4-16.i386.rpm matches Binary file apr-util-devel-0.9.4-16.i386.rpm matches Binary file arpwatch-2.1a13-4.i386.rpm matches Binary file ash-0.3.8-19.i386.rpm matches [...] # Reopening, because that behaviour simply seems wrong to me...
This behaviour is correct. Grep is doing as you asked it to.
And why do neither 'grep Name *' nor 'grep -- Name *' then return any result?! BTW, I thought "--" is only needed, if a file/directory starts with a (or more) "-", not when the filename contains a "-"...
Oh, it wasn't clear that '--' didn't help. You have an actual file whose entire name is '-'. Grep is behaving as documented. However, it appears to go against POSIX. Reopening. :-(
(FWIW: 'grep -- Name ./*' is the way to do this.)
https://savannah.gnu.org/bugs/index.php?func=detailitem&item_id=9668