find . -name *mobile* # does not work
vs
find . -name '*mobile*' # works
Różnica wynika z kroków, powłoka zajmuje, gdy analizuje się linii. Zwykle powłoka rozwinie wszelkie symbole wieloznaczne, które znajdzie przed uruchomieniem polecenia. Jednak pojedyncze cudzysłowy oznacza argument jako dosłownym, co oznacza, że powłoka nie wykonuje rozwinięcia wieloznacznego na tym argumencie przed uruchomieniem polecenia.
Aby zademonstrować różnicę, załóżmy, że są w katalogu z następujących plików:
$ tree
./
mobile.1
dir/
mobile.2
zsh poszerzy pierwszą formę do następujących przed uruchomieniem go:
find . -name mobile.1
Czyli find poszuka tylko plików o nazwie dosłownie mobile.1
Drugi formularz zostanie uruchomiony w następujący sposób:
find . -name *mobile*
Oznacza to, że find będzie szukał nazwy pliku zawierającego ciąg "mobile".
Należy zwrócić uwagę na to, że zarówno zsh, jak i find obsługują tę samą składnię wieloznaczną, ale w tym przypadku chcemy znaleźć obsługę wieloznaczników, a nie zsh.
Myślę, że lepiej tu odpowiedzieć: https://unix.stackexchange.com/questions/130958/scp-wildcard-not-working-in-zsh – sttaq