No caso B:
find . -iname *gall*
O shell expandirá *gall*
para uma lista de todos os arquivos correspondentes a esse padrão. Como você tem apenas um arquivo no diretório atual que corresponde a esse padrão, isso se torna:
find . -iname gallifrey-road-doctors-14437-1366x768.jpg
... então, o find procurará arquivos correspondentes a esse nome exato. foo-gallifrey-road-doctors-14437-1366x768.jpg
não foi encontrado. Se você tivesse dois ou mais arquivos que correspondem ao glob, você acabaria com um comando find malformado; Tenho certeza que seria simplesmente sair com um erro.
No caso A:
find . -iname "*gall*"
Por causa das aspas, o shell não irá expandir o padrão. Isso só se torna (é isso que find
vê):
find . -iname *gall*
Depois disso, o comando find usa esse padrão para procurar todos os arquivos (e diretórios, etc.) que correspondam a esse padrão. Isso localizará gallifrey-road-doctors-14437-1366x768.jpg
e foo-gallifrey-road-doctors-14437-1366x768.jpg
e todos os arquivos que corresponderem ao padrão *gall*
.
Então: seu comando passa pelo shell (que não expande globs entre aspas e retira a camada mais externa de aspas), e então passa para find
, que usa internamente o padrão para combinar nomes de arquivos.