Ten jest poprawny:
$ find . -name *main.o
./main.o
Dlaczego więc nie mogę znaleźć *.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
źródło
źródło
./sub/domain.o
, którego nie znalazł.Odpowiedzi:
Prawdopodobnie istnieje więcej niż jeden pasujący plik
*.o
, podczas gdy tylko jeden plik pasuje*main.o
, więc w pierwszym przypadku uruchamiane jest rozszerzenie powłoki:i to działa. W drugim przypadku:
I dlatego masz błąd.
Aby temu zapobiec, powinieneś podać
expression
oba polecenia:źródło
echo *.o
vsecho '*.o'
.*
,?
) bash potraktuje to jako dosłowny znak.Umieść wzór pliku w cudzysłowie. W przeciwnym razie * jest rozszerzane przez powłokę (przekształcane na listę plików przed znalezieniem go), myląc znajdowanie.
źródło
*
z ukośnikiem:find -name \*.o