find . -name *mobile* # does not work
vs
find . -name '*mobile*' # works
La différence est due aux étapes que l'enveloppe prend lorsqu'il analyse d'une ligne. Normalement, l'interpréteur de commandes développe tous les caractères génériques qu'il trouve avant d'exécuter la commande. Cependant, les guillemets simples marquent l'argument comme étant un littéral, ce qui signifie que le shell ne préforme pas l'expansion générique sur cet argument avant d'exécuter la commande.
Pour démontrer la différence, supposons que vous êtes dans un répertoire avec les fichiers suivants:
$ tree
./
mobile.1
dir/
mobile.2
zsh étendra la première forme à ce qui suit avant de l'exécuter:
find . -name mobile.1
Ce qui signifie que trouver regardera seulement les fichiers nommés littéralement mobile.1
La deuxième forme sera gérée comme suit:
find . -name *mobile*
Cela signifie que find recherchera tout nom de fichier contenant la chaîne "mobile".
La chose importante à noter ici est que zsh et find supportent la même syntaxe générique, mais vous voulez trouver à gérer les caractères génériques dans ce cas, pas zsh.
Je pense qu'il a une meilleure réponse ici: https://unix.stackexchange.com/questions/130958/scp-wildcard-not-working-in-zsh – sttaq