Dlaczego „nie” pokazuje tego pliku?

21

Używając findz grep, można zlokalizować pliki, które pasują do wzorca:

# find | grep error
./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html
./error_log
./includes/classes/error_log

Jednak przy użyciu findsamego pierwszego pliku nie znaleziono:

# find . -name error*
./error_log
./includes/classes/error_log

Dlaczego nie findlokalizuje errors.htmlpliku, gdy nie jest używany grep? Jak findwyświetla się również ten plik?

dotancohen
źródło

Odpowiedzi:

42

Musisz zacytować swój argument, error*ponieważ powłoka go rozwija. Tak więc to, co aktualnie uruchomiłeś find -name error_log, ponieważ właśnie do tego powłoka może ją rozwinąć ( error_logw bieżącym katalogu znajduje się plik o nazwie ).

find . -name 'error*'

To poprawne wywołanie dla twojego przypadku użycia.

Dennis Kaarsemaker
źródło
12
alternatywne pismo to find -name error\*- jeden klawisz mniej do naciśnięcia;) ma to ten sam efekt, *zostaje przekazany jako literatowa gwiazdka do polecenia find i nie jest rozszerzany przez powłokę
zhenech
3
W przypadku problemów z powłoką (w jaki sposób interpretuje ona wiersz poleceń i przekazuje wszystkie argumenty i parametry do rzeczywistego polecenia), uruchom ponownie polecenie, poprzedzając je echopoleceniem. Tak więc, gdybyś uruchomił echo find . -name error*, przyniosłoby to wynikfind . -name error_log
Carlos Campderrós