Solved

grep: *.java: No such file or directory

Posted on 2003-10-28
21
1,241 Views
Last Modified: 2013-11-13
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
0
Comment
Question by:CEHJ
  • 6
  • 5
  • 3
  • +5
21 Comments
 
LVL 5

Expert Comment

by:willy134
ID: 9636889
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
 
LVL 1

Expert Comment

by:MJoyce
ID: 9639234

Or try

grep -rl implements *java

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

Matt
0
 
LVL 86

Author Comment

by:CEHJ
ID: 9640679
>>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
Guide to Performance: Optimization & Monitoring

Nowadays, monitoring is a mixture of tools, systems, and codes—making it a very complex process. And with this complexity, comes variables for failure. Get DZone’s new Guide to Performance to learn how to proactively find these variables and solve them before a disruption occurs.

 
LVL 86

Author Comment

by:CEHJ
ID: 9640836
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
 
LVL 86

Author Comment

by:CEHJ
ID: 9640902
>>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
 

Expert Comment

by:jetstream
ID: 9641692
Try
grep -rl implements */*.java
0
 
LVL 86

Author Comment

by:CEHJ
ID: 9641756
That won't cut it - it excludes the current directory
0
 
LVL 20

Expert Comment

by:Gns
ID: 9644471
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
 
LVL 20

Expert Comment

by:Gns
ID: 9644506
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
 
LVL 62

Expert Comment

by:gheist
ID: 9644720
or you can type
set -o noglob
grep with dangerous wildcard*
set +o noglob
0
 
LVL 3

Expert Comment

by:guynumber5764
ID: 9646256
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
 
LVL 3

Expert Comment

by:guynumber5764
ID: 9646294
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
 
LVL 20

Expert Comment

by:Gns
ID: 9649436
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
 
LVL 20

Accepted Solution

by:
Gns earned 50 total points
ID: 9649462
"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
 
LVL 86

Author Comment

by:CEHJ
ID: 9649989
>>so unless you'd fancy an upgrade

Would that easy enough to do?
0
 

Expert Comment

by:jetstream
ID: 9649990
This works for me. And it's not long winded.

grep -l implements `find . -name *.java`
0
 
LVL 20

Expert Comment

by:Gns
ID: 9650253
.... 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
 
LVL 3

Expert Comment

by:guynumber5764
ID: 9653044
jet & gns... I guess I'll be tweaking my find scripts this aft.
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 9673940
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
 
LVL 20

Expert Comment

by:Gns
ID: 9676970
> 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
 
LVL 51

Expert Comment

by:ahoffmann
ID: 9677091
dooh, the very first comment unread by me, and I've some more daylight hours than Gns ;-)
Skol
0

Featured Post

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Upgrade BIOS / EUFI at Scale 4 72
What is the best way to transfer files from and to Linux VNC window? 9 76
Redhat upgrade 1 49
NTPD Client Port Usage 12 66
The purpose of this article is to demonstrate how we can use conditional statements using Python.
Google Drive is extremely cheap offsite storage, and it's even possible to get extra storage for free for two years.  You can use the free account 15GB, and if you have an Android device..when you install Google Drive for the first time it will give…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question