Há uma sutileza de como funciona a expansão de caractere curinga. Mude para um diretório que não contenha arquivos .jpg e digite
echo *.jpg
e irá produzir
*.jpg
Em particular, a string * .jpg não é modificada. Se, no entanto, você mudar para um diretório contendo arquivos .jpg, por exemplo, suponha que temos dois arquivos: image1.jpg e image2.jpg, então o comando echo * .jpg não produzirá
image1.jpg image2.jpg
e o * .jpg é expandido.
Se você digitar
find . -name *.jpg
e não há arquivos .jpg no diretório em que você está quando digita isso, então o find irá receber os argumentos ".", "-name" e "* .jpg". Se, no entanto, você digitar esse comando em um diretório contendo arquivos .jpg, digamos image1.jpg e image2.jpg, então, find receberá os argumentos ".", "-Name", "image1.jpg" e "image2.jpg". ", portanto, será executado o comando
find . -name image1.jpg image2.jpg
e encontrar vai reclamar. O que pode ser realmente confuso se você omitir as aspas é se houver um único arquivo .jpg (digamos image1.jpg). Em seguida, a expansão de curinga resultará em
find . -name image1.jpg
e o comando find encontrará todos os arquivos cujo nome de base é image1.jpg.
Além disso: Isso leva a um idioma bash útil para ver se algum arquivo corresponde a um determinado padrão:
if [ "$(echo *.jpg)" = "*.jpg" ]; then
# *.jpg has no matches
else
# *.jpg has matches
fi
embora seja avisado que isso não funcionará se houver um arquivo chamado '* .jpg' no diretório atual. Para ser mais impermeável, você pode fazer
if [ "$(echo *.jpg)" = "*.jpg" ] && [ ! -e "*.jpg" ]; then
# *.jpg has no matches
else
# *.jpg has matches
fi
(Embora não seja diretamente relevante para a pergunta, eu adicionei isso, pois ilustra alguns dos aspectos de como a expansão de caractere curinga funciona.)