grep ищет по регэкспам. если в
ls *.jpg
звездочка означает любую последовательность символов (ну, не совсем любую, наверно, но не суть), то в регэкспах - "любое количество повторов предыдущего символа".
т.е. "5*" будет соответствовать 5,55,555,55555 и т.д. "[a-zA-Z]*" = dgdGRGRdgd, dfdf, F, но не 9ff.
посему: во-первых, действительно проще
ls /path/*.jpg
во-вторых, если хочется поиграться с грепом, то правильнее будет
ls -1 | grep "\.jpg$"
ls | grep ".*\.jpg"
в первом случае делаем ls с опцией "один файл - одна строка" и ищем строки, которые заканчиваются на ".jpg"
во втором же первая точка означает любой (почти) символ, звездочка - любое число повторов оного, в конструкции "\." точка "эскейпится" бэкслэшем, что означает именно точку, а не "любой символ". т.е. мы ищем фрагменты текста, соответствующие "что-то-там.jpg"
как-то так. про регэкспы неплохо расписано в википедии, к grep очень многое из того применимо (а что не применимо напрямую - применимо к grep -E). вообще советую освоить, очень сильно иногда помогает
как-то так