ce que je faire c'est comme la commende find par ex on peut entrer find *.mp3 sans mettre \* ?
Essaie de te relire avant d'envoyer le message, tes phrases ne sont pas super claires.
Comme déjà expliqué, ton problème ne vient absolument pas de ton programme, mais du shell que tu utilises. Je me base sur bash, mais tu auras les mêmes soucis avec d'autres interpréteurs. Comme indiqué dans le lien de mon message précédent, avant que l'interpréteur ne lance la commande, il effectue différents traitements (substitution de commande, expansion des paramètres, etc). Dans le cas de bash, on peut désactiver le globbing (set -f ou set -o noglob) mais ça n'a aucun intérêt dans la vie courante.
Et surtout, find subit aussi l'expansion des paramètres, comme toutes les autres commandes. La preuve :
$ mkdir tmp
$ touch 1.mp3 tmp/2.mp3 tmp/1.mp3
$ find . ./1.mp3 -name *.mp3
./tmp/1.mp3
Bash fait l'expansion des paramètres, et transforme *.mp3 par 1.mp3 car ce fichier existe dans le répertoire courant. La commande lancée est donc find . -name 1.mp3, ce qui explique pourquoi il ne trouve pas tmp/2.mp3. Ça se voit très bien en activant le debug :
$ set -x
$ find . -name *.mp3
+ find . -name 1.mp3
./1.mp3
./tmp/1.mp3
En fait, la plupart du temps, tu as l'impression que le shell ne fait pas l'expansion, car le masque ne matche aucun fichier dans le répertoire courant. Par exemple :
$ rm 1.mp3
$ ls *.mp3
ls: ne peut accéder *.mp3: Aucun fichier ou dossier de ce type
$ set -x
$ find . -name *.mp3
+ find . -name '*.mp3'
./tmp/1.mp3
./tmp/2.mp3
Il est donc
impératif de mettre le paramètre de name entre quotes, ce qui est bien précisé dans le manuel :
Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.
#find "*.exe" (va chercher le fichier "*.exe")
Non. Cette commande va rechercher tous les fichiers matchant le masque "*.exe", nuance.