Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I am running the following command, but it is not performed recursively:

find . -name *.java

I know there are java files further down in the current directory but it is performing the find on the current directory only. I am using OS X, 10.9.

share|improve this question
    
@Gilles : This Q&A is much clearer and less localized than the dupe -- if one of them should be closed, it's the other one. –  goldilocks Apr 7 at 1:50

1 Answer 1

up vote 18 down vote accepted

The problem is, you didn't quote your -name parameter. Do this instead:

find . -name '*.java'

Explanation

Without the quotes, the shell interprets *.java as a glob pattern and expands it to any file names matching the glob before passing it to find. This way, if you had, say, foo.java in the current directory, find's actual command line would be:

find . -name foo.java

which would obviously list the file in the current directory only (unless you happen to have some similarly-named files further down the tree).

Quoting prevents glob expansion and passes the command line to find as-is.

Incidentally, if the glob had failed to match (no *.java files in the current directory), you would get one of two behaviors depending on how your shell is set up to handle globs that don't match (this is governed by the nullglob option in Bash, for example):

  1. If a glob that doesn't match is not expanded by the shell, find will (accidentally, mind you) exhibit correct behavior.
  2. If a glob that doesn't match is expanded into an empty string by the shell, find will complain that it is missing an argument to -name.
share|improve this answer
    
we posted the answers at the same time.. –  user11498 Apr 6 at 22:05

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.