web-dev-qa-db-fra.com

Pourquoi je peux trouver * main.o mais pas * .o?

Celui-ci est correct:

$ find . -name *main.o
./main.o

Alors, pourquoi je ne trouve pas *.o?

$ find . -name *.o
find: paths must precede expression: main.o
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
19
Tom Brito

Il y a probablement plus d'un fichier qui correspond à *.o, alors qu'un seul fichier correspond à *main.o, aussi, dans le premier cas, l'extension du shell s'exécute:

$ find . -name main.o

et ça marche. Dans le second cas:

$ find . -name file1.o main.o

Et c'est pourquoi vous avez une erreur.

Pour éviter cela, vous devez citer expression dans les deux commandes:

$ find . -name '*.o'
$ find . -name '*main.o'
46
Lety

Mettez le modèle de fichier entre guillemets. Sinon, * est développé par le Shell (résolu en une liste de fichiers avant que find ne le voit), ce qui crée une confusion.

find . -name "*.o"
17
Stefan Haustein