"Lokalisiere" seltsames Verhalten - warum?

9

locate "*.png"Gibt .pngerwartungsgemäß alle Dateien zurück, die mit enden .

locate "test.*"gibt nichts zurück, aber es gibt Dateien mit Namen testin meinem System.

locate "*test"Gibt testerwartungsgemäß alle Dateien zurück, die mit enden .

locate "test*"gibt nichts zurück, aber es gibt Dateien, die mit testin meinem System beginnen.

Warum scheinen Platzhalter nur zum "Beenden mit" zu funktionieren?

Vittorio Romeo
quelle
1
Haben Sie das lokalisierte b neu erstellt, nachdem Sie die Dateien erstellt haben, die mit test*und übereinstimmen test.*?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams: ja
Vittorio Romeo

Antworten:

12

locate "test.*" gibt nichts zurück, aber es gibt Dateien mit dem Namen test in meinem System.

.wird als Punkt behandelt, nicht wie bei Regex als beliebiges Zeichen, test.*stimmt also nicht überein test, aber test.foo.

locate "test*"gibt nichts zurück, aber es gibt Dateien, die mit testin meinem System beginnen.

Suchen speichert den vollständigen Pfad zur Datei . Um also Dateien zu finden, die mit dem Test beginnen, sollten Sie verwenden locate "*/test*".

Der letzte Punkt kann verwirrend sein, da er locate fooalles enthält, einschließlich foo, sodass das Muster als interpretiert wird *foo*. Es scheint, dass das Muster nicht in Sternen eingeschlossen ist, wenn das Muster bereits einen Platzhalter enthält.

Haftungsausschluss : Ich habe einige Tests durchgeführt und dies sind meine Schlussfolgerungen. Ich kann sie nicht durch Zitieren der Manpage beweisen, die sehr rudimentär erscheint.

mpy
quelle
3
In meinem man locateIch habe: Wenn --regex nicht angegeben ist, können MUSTER Globbing-Zeichen enthalten. Wenn ein MUSTER keine Globbing-Zeichen enthält, verhält sich die Suche so, als wäre das Muster * MUSTER *.
gniourf_gniourf