Warum wird diese Datei nicht "gefunden"?

21

Mit findwith grepkann man Dateien finden, die einem Muster entsprechen:

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

Wenn Sie jedoch findnur die erste Datei verwenden, wird Folgendes nicht gefunden:

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

Warum wird finddie errors.htmlDatei nicht gefunden, wenn sie nicht mit verwendet wird grep? Wie wird finddiese Datei auch angezeigt?

dotancohen
quelle

Antworten:

42

Sie müssen Ihr Argument in Anführungszeichen setzen, error*da die Shell es erweitert. Was Sie also gerade ausführen, ist find -name error_log, dass die Shell es so erweitern kann (es gibt eine Datei mit dem Namen error_login Ihrem aktuellen Verzeichnis).

find . -name 'error*'

Ist der richtige Aufruf für Ihren Anwendungsfall.

Dennis Kaarsemaker
quelle
12
eine alternative schrift ist find -name error\*- eine taste weniger zu drücken;) dies hat den gleichen effekt, das *wird als gebildeter stern an den find befehl übergeben und von deiner shell nicht erweitert
zhenech
3
Wenn Sie Probleme mit der Shell haben (wie sie Ihre Befehlszeile interpretiert und alle Argumente und Parameter an den tatsächlichen Befehl übergibt), führen Sie den Befehl erneut aus, bevor Sie ihn mit dem echoBefehl beginnen. Also, wenn Sie laufen echo find . -name error*würden, hätte es ausgegebenfind . -name error_log
Carlos Campderrós