なぜ、locate */file*name は機能するのに、locate file*name は機能しないのでしょうか?

なぜ、locate */file*name は機能するのに、locate file*name は機能しないのでしょうか?

以下は意図したとおりに動作しています:

$ 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 

ただし、何も返されません。

どうしたの?

編集: デバッグ:

$ 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

答え1

ファイルを検索する場合、標準のワイルドカード (グロビング パターンとも呼ばれます) を含むlocate コマンドは、ローカル データベース内のファイルへのパスを検索します。は/synse_*_r_unseen_zs.npyファイルへの完全なパスではないため、何も返しません ( Ubuntu でのlocate /synse_*_r_unseen_zs.npyの検索結果は空のセットであるため)。ただし、はファイルへの完全なパスであるため、コマンドの結果を返します。これらのコマンドのアスタリスク文字は、locate によってワイルドカードとして解釈されます。アスタリスクは任意の数の文字 (0 を含む、つまり 0 文字以上) を表すことができます。locate synse_*_r_unseen_zs.npy*/synse_*_r_unseen_zs.npylocate */synse_*_r_unseen_zs.npy

答え2

@steeldriverが述べたように、locateデフォルトでは*検索語の先頭と末尾にワイルドカードが付加されます(つまりlocate abc実際にはlocate *abc*を除外する検索語に自分でワイルド カードを追加した場合、余分な*ワイルド カードは末尾にも先頭にも追加されません。

つまり、検索語の前に$ locate synse_*_r_unseen_zs.npya が付いていないため何も見つからないのに対し、期待どおりの*$ 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 

関連情報