You should almost
never need to
use ls to get a list of files. Bash has excellent
globbing ability, and can do almost everything you need. Particularly when you use
extended globbing patterns.
Code:
cp [[:lower:]]* targetdirectory
Edit: Note also that word splitting isn't done on the results of a glob, at least as long as it's being passed directly to the program being executed (splitting happens before globbing), so spaces and other reserved characters shouldn't be a problem. This wouldn't be true if additional processing of the line is done after the globbing substitution is made, such as when using it inside a
$() command substitution.