Le cas de find est particulièrement tordu. En pratique il y a 3 cas :
find . -name '*.jpg' # ou \*.jpg, ou "*.jpg"
=> Trouve tous les fichiers se terminant par .jpg, dans le répertoire courant et ses sous-répertoires. C'est en général ce qu'on veut. Le shell va passer *.jpg sans expansion à find, qui fait le boulot.
find . -name *.jpg
=> Si il existe un fichier terminant par .jpg dans le répertoire courant (disons foo.jpg), alors le shell va faire l'expansion, et la commande réelle sera find . -name foo.jpg, qui va trouver tous les fichiers nommés foo.jpg dans le répertoire courant et ses sous-répertoires. C'est probablement une bêtise.
=> Si il n'existe pas de fichier terminant par .jpg dans le répertoire courant, alors le shell va tenter l'expansion, qui va échouer. La plupart des shells (bash compris) vont laisser *.jpg tel quel, et la commande sera donc bien find . -name *.jpg qui fera ce qu'on attend. C'est un coup de chance, mais c'est probablement une bêtise aussi.
[^] # Re: * est un caractère spécial
Posté par Matthieu Moy (site web personnel) . En réponse au message Commande find et déspécialisation. Évalué à 10.
Le cas de
findest particulièrement tordu. En pratique il y a 3 cas :=> Trouve tous les fichiers se terminant par
.jpg, dans le répertoire courant et ses sous-répertoires. C'est en général ce qu'on veut. Le shell va passer*.jpgsans expansion àfind, qui fait le boulot.=> Si il existe un fichier terminant par
.jpgdans le répertoire courant (disonsfoo.jpg), alors le shell va faire l'expansion, et la commande réelle serafind . -name foo.jpg, qui va trouver tous les fichiers nommésfoo.jpgdans le répertoire courant et ses sous-répertoires. C'est probablement une bêtise.=> Si il n'existe pas de fichier terminant par
.jpgdans le répertoire courant, alors le shell va tenter l'expansion, qui va échouer. La plupart des shells (bash compris) vont laisser*.jpgtel quel, et la commande sera donc bienfind . -name *.jpgqui fera ce qu'on attend. C'est un coup de chance, mais c'est probablement une bêtise aussi.