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]
command-line
find
Tom Brito
la source
la source
./sub/domain.o
, qu'il n'a pas trouvé.Réponses:
Il y a probablement plus d'un fichier qui correspond
*.o
, alors qu'un seul fichier correspond*main.o
, donc, dans le premier cas, l'expansion du shell s'exécute:et cela fonctionne. Dans le second cas:
Et c'est pourquoi vous avez eu une erreur.
Afin d'éviter cela, vous devez citer
expression
dans les deux commandes:la source
echo *.o
vsecho '*.o'
.*
,?
) le traitera comme le caractère littéral.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 déroute find.
la source
*
avec une barre oblique inverse:find -name \*.o