With the zsh shell:

```
set -o extendedglob

searchdir=/volume2
filename=list-in.txt
names=( ${(f)"$(<$filename)"} )
files=( $searchdir/**/(#i)(${(~j[|])names:r}).*(ND.) )
print -rC1 -- $files
```

In addition to case insensitive matching enabled with `(#i)` here, you can also enable approximate matching. For instance `(#a2)` allowing matches with up to 2 errors (omissions, insertions, transposition, different character).

- `$(<file)` expands to the contents of the `file`. Here it's quoted to prevent IFS-spitting.
- `${(f)expansion}` splits the expansion on line `f`eeds.
- `${file:r}` expands to the `r`ootname of the file (extension removed). When applied to an array, that applies to all the elements.
- `${(j[|])array}` `j`oins the array elements with `|`. With `~`, that `|` is treated as a glob operator (alternation).
- `**/` matches any level of subdirectories (including 0).
- `(ND.)`: glob qualifiers:
- `N`ullglob: no error if there's no match
- `D`otglob: also look for hidden files
- `.` matches only *regular* files (like the `-type f` of `find`).