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.