3
find . -name *.jks -print 2>/dev/null

returns files of extension jks that do not have underscores as part of their name. Much to my surprise, I have just discovered that * does NOT substitute the underscore.

find . -name *_*.jks -print 2>/dev/null

returns files of extension jks that have one underscore.

How do I search for files that have 0 or more underscores? Using OSX Mountain Lion.

Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
amphibient
  • 12,222
  • 18
  • 62
  • 87
  • 1
    Is your `find` supporting _and_ logical operator? `find . -name '*.jks' -a ! -name '*_*.jks'` – manatwork Sep 17 '13 at 14:13
  • `find . -name '*.jks' -print 2>/dev/null` worked. you can submit an answer, @manatwork, and i will go ahead and accept it and up vote – amphibient Sep 17 '13 at 14:16
  • Your question is a bit strange: in my Linux (CentOS 5), your sample doesn't work. I have to write "*.jks". And, anyway, it returns **all** files with extension jks, with or without an underscore, that is what you are asking for. – AndrewQ Sep 17 '13 at 14:16
  • @AndrewQ, probably amphibient has no *.jks file in the work directory itself, so the wildcard is not expanded before the execution of `find`. – manatwork Sep 17 '13 at 14:17

1 Answers1

11

all versions of find that I know will match underscores with wildcards.

be warned that when doing.

find . -name *.jks -print 2>/dev/null

the "*.jks" might get expanded by the shell, before running the find command.

e.g.

$ mkdir foo
$ touch a.jks foo/a.jks foo/b.jks
a.jks
$ find . -name *.jks -print
./a.jks
./foo/a.jks

this is really because you are actually calling find . -name a.jks -print, and thus it will not find e.g. b.jks.

if you quote the wildcard expression, you might have more luck:

$ find . -name "*.jks" -print
./a.jks
./foo/a.jks
./foo/b.jks

i'm pretty sure that running

$ find . -name "*.jks" -print

will give you all files with and without underscores.

umläute
  • 6,300
  • 1
  • 24
  • 48