Folgendes funktioniert wie vorgesehen:
$ locate */synse_*_r_unseen_zs.npy
/mnt/home/dario/temp/synse_resources/language_modelling/repo_test_cadavae_5_r_val/bert/cadavae_5_r_unseen_zs.npy /mnt/home/dario/temp/synse_resources/language_modelling/repo_test_synse_10_r_val/bert/synse_10_r_unseen_zs.npy
$ locate synse_*_r_unseen_zs.npy
Dies gibt jedoch nichts zurück.
Was ist los?
BEARBEITEN: Debuggen:
$ echo */synse_*_r_unseen_zs.npy
*/synse_*_r_unseen_zs.npy
$ echo /synse_*_r_unseen_zs.npy
/synse_*_r_unseen_zs.npy
$ echo synse_*_r_unseen_zs.npy
synse_*_r_unseen_zs.npy
Antwort1
Beim Suchen von Dateien sucht ein Locate-Befehl, der Standard-Platzhalter (auch als Globbing-Muster bekannt) enthält, nach Pfaden zu Dateien in seiner lokalen Datenbank. /synse_*_r_unseen_zs.npy
ist kein vollständiger Pfad zu einer Datei und locate /synse_*_r_unseen_zs.npy
gibt daher nichts zurück (da die Suchergebnisse locate synse_*_r_unseen_zs.npy
in Ihrem Ubuntu eine leere Menge sind), */synse_*_r_unseen_zs.npy
ist jedoch ein vollständiger Pfad zu Datei(en) und locate */synse_*_r_unseen_zs.npy
gibt daher die Ergebnisse des Befehls zurück. Das Sternchen in diesen Befehlen wird von Locate als Platzhalter interpretiert. Das Sternchen kann eine beliebige Anzahl von Zeichen darstellen (einschließlich Null, also null oder mehr Zeichen).
Antwort2
Wie @steeldriver erwähnt hat, locate
wird standardmäßig ein *
Platzhalter an den Anfang und das Ende des Suchbegriffs angehängt (so locate abc
ist es eigentlich locate *abc*
)außerWenn Sie dem Suchbegriff selbst ein Platzhalterzeichen hinzufügen, werden die zusätzlichen *
Platzhalterzeichen weder angehängt noch vorangestellt.
Also, while $ locate synse_*_r_unseen_zs.npy
findet nichts, weil es *
dem Suchbegriff kein a voranstellt, $ locate *synse_*_r_unseen_zs.npy
findet das erwartete
/mnt/home/dario/temp/synse_resources/language_modelling/repo_test_cadavae_5_r_val/bert/cadavae_5_r_unseen_zs.npy /mnt/home/dario/temp/synse_resources/language_modelling/repo_test_synse_10_r_val/bert/synse_10_r_unseen_zs.npy