Was ist der Unterschied zwischen \*.xml
und *.xml
im Find-Befehl in Linux/Mac?
Die ergebnisse von:
find . -name \*.xml and find . -name *.xml
sind 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 find
die 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 find
Befehl überhaupt berührt wird.
Wenn Sie beispielsweise nur eine Datei somefile.xml
in Ihrem Verzeichnis hätten, würde die Shell das Platzhalterzeichen erweitern und die Zeichenfolge wörtlich somefile.xml
an 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 *.xml
Platzhalter ü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 locate
besser ist oder nicht, hängt wirklich davon ab, wofür Sie es verwenden. Es locate
ist 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, find
bietet jedoch eine Vielzahl von Optionen zur Verfeinerung Ihrer Suche.