Dieser ist richtig:
$ find . -name *main.o
./main.o
Also, warum kann ich nicht finden *.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
quelle
quelle
./sub/domain.o
, die nicht gefunden wurde.Antworten:
Wahrscheinlich gibt es mehr als eine Datei, die übereinstimmt
*.o
, während nur eine Datei übereinstimmt*main.o
. Daher wird im ersten Fall die Shell-Erweiterung ausgeführt:und das funktioniert. Im zweiten Fall:
Und deshalb hast du Fehler bekommen.
Um dies zu verhindern, sollten Sie
expression
in beiden Befehlen angeben:quelle
echo *.o
vs überprüfenecho '*.o'
.*
,?
) - Bash übereinstimmen. Dies wird als Literalzeichen behandelt.Setzen Sie das Dateimuster in Anführungszeichen. Andernfalls wird * von der Shell erweitert (in eine Liste von Dateien aufgelöst, bevor find es sieht), was find verwirrt.
quelle
*
mit einem Backslash davonkommen:find -name \*.o