Resposta curta:
find /var/www -type f -name '*.jpg\?'
Explicação:
? tem um significado especial em mais conchas . É o caractere curinga de "caractere único".
Em um shell, isso significa que ele se expandirá para qualquer caractere, da mesma forma que * se expande para qualquer string:
> echo *
1file 2file dir1 dir2 file1 file2
> echo ?
?
> echo file?
file1 file2
Tenha em mente que esses caracteres especiais serão expandidos pelo seu shell, não pelo comando para o qual você está passando como argumentos.
No caso específico de find , find também aceita curingas. Assim, você tem para escapar deles no shell para encontrar para recebê-los.
Deixe-me esclarecer isso com outro exemplo:
> echo *
dir1 file1 file2
> find dir1 -name *
find: paths must precede expression: file1
> find dir1 -name \*
dir1
dir1/test1
dir1/test2
> find dir1 -name '*'
dir1
dir1/test1
dir1/test2
Se eu não escapar do * , find receberá a mesma string que o echo mostrou, em vez do *
Como você pode ver, você pode escapar de caracteres especiais com barra invertida ou cercá-los com ' aspas simples. Eu prefiro aspas simples por muitas razões. (Observe que isso se aplica a bash, dash e talvez outros, mas provavelmente não a todos).
Agora você escapou do ? do shell, mas não do find. Isso geralmente não causará problemas, mas poderá ocorrer, por exemplo, se você tiver um arquivo file.jpga que não deseja excluir:
> find . -type f -name '*.jpg?'
./file1.jpg?
./file2.jpga
> find . -type f -name '*.jpg\?'
./file1.jpg?
Outra opção seria find . -type f -name \*.jpg\\? ... agora você vê porque prefiro aspas simples.