<p>I'm looking for shell scripts files installed on my system, but <strong>find</strong> doesn't work:</p>

<pre><code>$ find /usr -name *.sh
</code></pre>

<p>But I know there are a ton of scripts out there.  For instance:</p>

<pre><code>$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh
</code></pre>

<p>Why doesn't <strong>find</strong> work?</p>

Try quoting the wildcard:
```
```
$ find /usr -name \*.sh
```
```
or:
```
```
$ find /usr -name '*.sh'
```
```
If you happen to have a file that matches
*.sh
in the current working directory, the wildcard will be expanded before find sees it.  If you happen to have a file named tkConfig.sh in your working directory, the
find
command would expand to:
```
```
$ find /usr -name tkConfig.sh
```
```
which would only find files named tkConfig.sh.  If you had more than one file that matches
*.sh
, you'd get a syntax error from
find
:
```
```
$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list
```
```
Again, the reason is that the wildcard expands to both files:
```
```
$ find /usr -name tclConfig.sh tkConfig.sh
```
```
Quoting the wildcard prevents it from being prematurely expanded.
Another possibility is that /usr or one of its subdirectories is a symlink.
find
doesn't normally follow links, so you might need the
-follow
option:
```
```
$ find /usr -follow -name '*.sh'
```
```