grep: *.java: No such file or directory

Can anyone tell me why I get this infuriating error message when I issue this command?

grep -rl implements *.java

Surely I don't need to use an additional command?

I'm using GNU grep 2.4.2
LVL 86
CEHJAsked:
Who is Participating?
 
GnsConnect With a Mentor Commented:
"one that the" -> "one than the"
"better sine" -> "better since"
"find . -name \*.java -print | xargs grep implements" -> "find . -name \*.java -print | xargs grep -l implements"

... So many errors in such a short comment... And then one wonders where there are such an abundance of bugs:-)

-- Glenn (a.k.a. Le Grand Typo)
0
 
willy134Commented:
I believe it is looking for a directory called something.java  why don't you use

grep -rl implements * | grep java

Good Luck
willy
0
 
MJoyceCommented:

Or try

grep -rl implements *java

presumably you do have some files where the names end in java ?

Matt
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
CEHJAuthor Commented:
>>presumably you do have some files where the names end in java ?

Of course ;-) btw I've already tired that (I think). I'll try it again to be sure. Why won't a glob work though?

Don't tell me I really *have* to do something like

grep -rl implements `find . -name *.java`

?
0
 
CEHJAuthor Commented:
willy134 i missed you comment at first

>>grep -rl implements * | grep java

Is something quite different ;-) And I don't want grep looking in all files
0
 
CEHJAuthor Commented:
>>Is something quite different

Let me qualify that. It will have the same *effect* as I'm looking for (although the second re should really be qualified by the line end) but why give the first grep the unnecessary overhead of searching all files?
0
 
jetstreamCommented:
Try
grep -rl implements */*.java
0
 
CEHJAuthor Commented:
That won't cut it - it excludes the current directory
0
 
GnsCommented:
The problem is _where_ the glob is expanded (and who does the expansion... namely the shell)... As you write it, it'll just expand in "." and include anything (files or directories) ending in .java ... You should be using the --include=<glob> instead:
grep -rl --include=\*.java implements .

-- Glenn
0
 
GnsCommented:
Ooops, that was for gnu grep version 2.5.1 ... 2.4.2 doesn't have it, so unless you'd fancy an upgrade, the find/grep combo is it.

-- Glenn
0
 
gheistCommented:
or you can type
set -o noglob
grep with dangerous wildcard*
set +o noglob
0
 
guynumber5764Commented:
does "ls *.java" give you the same message?

(that might answer your question)

Also, I always keep a few one-line scripts to the effect of:

find / -name "$1" -print 2>/dev/null
and
find / -exec grep "$1" {} \; 2>/dev/null

lying around.  I won't swear to the syntax but you get the idea.
0
 
guynumber5764Commented:
Ignore the bonehead (ls) part of my prev post and try;

find . -name "*.java" -exec grep implements {} \; -print

it'll get you into the neighbourhood (if the quotes on the -exec are right)
0
 
GnsCommented:
That "find ... -exec ..." is worse in one respect, and better in one that the "grep ... `find ...`". Worse in the excessive fork/exec, and better sine it avoids any commandline lenght/number of parameters issues. The best on this account would be
find . -name \*.java -print | xargs grep implements
but CEHJ states s/he doesn't want that.... so then the only way would be to upgrade to a gnu grep that will allow the --include= thing (as in 2.5.1).

I think that just officially beat this question to death...:-)

-- Glenn
0
 
CEHJAuthor Commented:
>>so unless you'd fancy an upgrade

Would that easy enough to do?
0
 
jetstreamCommented:
This works for me. And it's not long winded.

grep -l implements `find . -name *.java`
0
 
GnsCommented:
.... And it has already been suggested (as not feasible... by CEHJ... and do read my comment on it's merits/non-merits (implied by the find ... -exec ... comment)) jetstream.

CEHJ: Well, that depends a little on distro etc. You could very well just build it from source (grab it from a gnu-mirror... or ftp://ftp.gnu.org/gnu/grep note that only the source rpm is "there" ATM, since they are confirming that noone has ...manipulated the tar-files. I'd guess 2.5 would be fine too. If youbuild it from source, it is often prudent to install to "an alternate location" than the distros "normal location", or removing the grep package altogether before running make install...
Or you might have an "update" for your distro... If it is rpm-based, http://www.rpmfind.net might be a help... or just apt-get for Debian... As I said, it depends:-).

-- Glenn
0
 
guynumber5764Commented:
jet & gns... I guess I'll be tweaking my find scripts this aft.
0
 
ahoffmannCommented:
didn't read all the comments, so please be patient if my suggestion still have been done:

  grep -rl implements *

or:

  grep -rl implements *|grep java
0
 
GnsCommented:
> grep -rl implements *
Too "inclusive" ... Not limited to results in .java files;-)

> grep -rl implements *|grep java
The first comment (by willy134) mention this... You're a man by your word Achim, you really didn't read all the comments:-):-)
Nice seeing you active again though;-).

-- Glenn
0
 
ahoffmannCommented:
dooh, the very first comment unread by me, and I've some more daylight hours than Gns ;-)
Skol
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.