Finding all files with certain extension in Unix?

Probably your JDKs are uppercase and/or the version of find available on OS X doesn't default to -print if no action is specified; try:

find . -iname "*.jdk" -print

(-iname is like -name but performs a case-insensitive match; -print says to find to print out the results)

--- EDIT ---

As noted by @Jaypal, obviously find . ... looks only into the current directory (and subdirectories), if you want to search the whole drive you have to specify / as search path.


find . only looks in your current directory. If you have permissions to look for files in other directories (root access) then you can use the following to find your file -

find / -type f -name "*.jdk"

If you are getting tons of permission denied messages then you can suppress that by doing

find / -type f -name "*.jdk" 2> /dev/null

a/

find . means, "find (starting in the current directory)." If you want to search the whole system, use find /; to search under /System/Library, use find /System/Library, etc.

b/

It's safer to use single quotes around wildcards. If there are no files named *.jdk in the working directory when you run this, then find will get a command-line of:

    find . -name *.jdk

If, however, you happen to have files junk.jdk and foo.jdk in the current directory when you run it, find will instead be started with:

    find . -name junk.jdk foo.jdk

… which will (since there are two) confuse it, and cause it to error out. If you then delete foo.jdk and do the exact same thing again, you'd have

    find . -name junk.jdk

…which would never find a file named (e.g.) 1.6.0.jdk.

What you probably want in this context, is

    find /System -name '*.jdk'

…or, you can "escape" the * as:

    find /System -name \*.jdk