Red Hat Bugzilla – Bug 128018
grep through > 400 files in the same directory hangs up
Last modified: 2007-11-30 17:10:46 EST
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
Version-Release number of selected component (if applicable):
Every time, see above and below.
Steps to Reproduce:
1. For example, install all (or more than 450) Fedora Core source
2. cd /usr/src/redhat/SPECS/
3. grep Name *
[4. Get the hangup]
Well, grep hangs up and doesn't speak with me - I've got a strace
of such a grep attached.
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",
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
# cd /usr/src/redhat/RPMS/i386
# ls -l | wc -l
# 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
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
However, it appears to go against POSIX. Reopening. :-(
(FWIW: 'grep -- Name ./*' is the way to do this.)