Você não deveria estar usando ls
. Eu suponho que você esteja usando o bash. Vamos apenas usar os caracteres de globalização de shell para armazenar os arquivos em uma matriz:
matching_files=( $log_dir/$pattern )
if [[ "${#matching_files[@]}" -eq 0 ]]; then
echo "no files found"
else
echo "I found these matching files:"
printf "%s\n" "${matching_files[@]}"
fi
for file in "${matching_files[@]}"; do
do_something_with "$file"
done