Unterschied zwischen \*.xml und *.xml im Suchbefehl

Unterschied zwischen \*.xml und *.xml im Suchbefehl

Was ist der Unterschied zwischen \*.xmlund *.xmlim Find-Befehl in Linux/Mac?

Die ergebnisse von:

find . -name \*.xml and find . -name *.xmlsind anders. Aber warum?

Und ist es locate '*.xml'besser als „find“? Welches wird am häufigsten verwendet?

Antwort1

Indem Sie das Sternchen maskieren, geben Sie finddie entsprechende Zeichenfolge an *.xml, die intern unabhängig von der Shell als Platzhalter analysiert werden kann. Wenn Sie das Sternchen nicht maskieren oder in Anführungszeichen setzen, wird es von der Shell erweitert, bevor es vom findBefehl überhaupt berührt wird.

Wenn Sie beispielsweise nur eine Datei somefile.xmlin Ihrem Verzeichnis hätten, würde die Shell das Platzhalterzeichen erweitern und die Zeichenfolge wörtlich somefile.xmlan Ihren Befehl übergeben. zB:

sh-4.1$ find . -name *.xml

wäre genau gleichbedeutend mit:

sh-4.1$ find . -name somefile.xml

was nur mit genau diesem Dateinamen übereinstimmt. Wenn Sie in Ihrem Verzeichnis zwei Dateien haben, die mit dem *.xmlPlatzhalter übereinstimmen, erhalten Sie wahrscheinlich einen Syntaxfehler, wenn der Platzhalter erweitert wird:

sh-4.1$ find . -name somefile.xml someotherfile.xml
find: paths must precede expression: someotherfile.xml
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Ob es locatebesser ist oder nicht, hängt wirklich davon ab, wofür Sie es verwenden. Es locateist zwar viel schneller, basiert aber auf einem vorgefertigten Index und ist daher nur so gut wie das letzte Index-Update (normalerweise täglich, aber das hängt von der Distribution ab). Außerdem gibt es nur Ergebnisse basierend auf Dateinamenübereinstimmungen zurück, findbietet jedoch eine Vielzahl von Optionen zur Verfeinerung Ihrer Suche.

verwandte Informationen