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 thefile. Here it's quoted to prevent IFS-spitting.${(f)expansion}splits the expansion on linefeeds.${file:r}expands to therootname of the file (extension removed). When applied to an array, that applies to all the elements.${(j[|])array}joins the array elements with|. With~, that|is treated as a glob operator (alternation).**/matches any level of subdirectories (including 0).(ND.): glob qualifiers:Nullglob: no error if there's no matchDotglob: also look for hidden files.matches only regular files (like the-type foffind).